News for hackers. Stuff that matters.
Re:Mastering Programming: An Outline by jondubois on Wednesday June 08, 2016 @01:48AM (#11860284)
This article should be called 'Mastering large-scale team programming'. In reality there is no single correct approach to programming. All programmers/engineers/developers have different specializations.

Some developers are really good at getting an MVP out the door quickly but their code may not quite work at scale. Others are good at working in large teams on large projects, others work better alone or in small teams. These different types will produce different types of code - the utility value of various programming habbits changes based on team size, project size and urgency requirements.

There could be some 'Master MVP programmers' and 'Master team-player programmers', 'Master large-project programmers'... You can rarely put them all under a single label - As developers we tend to get stuck with particular styles depending on which kinds of companies we have worked for.

It is not quite correct to assume that because a company is financially successful and handles many millions of users, that its methodologies are the only correct way to do things.

Programming is an adaptive skill and should change based on economic/scale requirements.

Re:Mastering Programming: An Outline by phillipwills on Wednesday June 08, 2016 @02:48AM (#11860474)
I wouldn't say that this article is describing a correct way to do things. It's more of a set of guidelines to follow, and I'm glad someone wrote them down.

I've been doing these things, but I generally have a hard time concisely describing it. Of course, these aren't hard and fast rules. More of a guide to thinking about problems to help programmers be more efficient and accurate... More precise...

I don't really know how to describe it, but one day, you find yourself doing these things more... Stuff gets easier... Things just start to click.

I'd like to add one more, though maybe it's really just another way of putting one of the other statements.

Stop worrying about all the unknowns in the project. Work on what's known, usually the unknowns will become more clear as you progress.

Re:Mastering Programming: An Outline by LoSboccacc on Wednesday June 08, 2016 @02:57AM (#11860509)
yeah many are really important, like the part about 'calling your shot' - I constantly see so many people testing solutions to problem at random, either copy pasted from internet or built using random auto-completion; they spend days and days circling around without ever understanding the changes they're making nor the goal their building towards.

It's doubly painful when days after they come up with the random set of lines that produces the intended result and dozen unintended side effects and proudly declare 'see! I did it'

the fact is this stuff has been in literature from the seventies. I found very little in this article that couldn't be found in 'code complete' or 'refactorings'. I just wish at some point developers will stop learning everything from scratch.

Re:Mastering Programming: An Outline by jcbrand on Wednesday June 08, 2016 @04:59AM (#11860919)
> Stop worrying about all the unknowns in the project. Work on what's known, usually the unknowns will become more clear as you progress.

Good advice which applies not only to software development. I've found that focusing on what's currently known and on what I can change removes anxiety, allows me to move forward and then usually the unknowns resolve themselves along the way.

Re:Mastering Programming: An Outline by mcguire on Wednesday June 08, 2016 @11:13AM (#11862764)
It works very well, until it doesn't. Then you have a pretty interface, an elegant test suite, and a big black box full of entropy and ignorance labeled "then a miracle occurs".
Re:Mastering Programming: An Outline by phillipwills on Wednesday June 08, 2016 @12:01PM (#11863150)
Even when that does happen... and I'd argue that it often does not, if you've done the work to make your interface pretty, and write a precise, accurate test suite, you've usually done the work to make the actual functions neat and orderly...

Even when you end up with a black box full of entropy, it's segregated from the rest of the system. You can feel free to change the rest of the system around it and know that the black box will keep doing it's job, as long as you keep using the well-written API within spec.

But, that's not all you get... because you took the time to write the tests, you can refactor this entropy box to your heart's content... until it starts looking more approachable. You've got your tests around the API, right? Then you don't even really need to change them to do the refactor work. The only reason to change the tests would be if you want the function to do something else (or you missed something, of course).

Take small steps... refactor out a couple lines at a time... run the tests with each iteration. Based on previous experience, you're going to end up with a fairly clear and concise implementation... not to mention performant.

Re:Mastering Programming: An Outline by mcguire on Wednesday June 08, 2016 @05:57PM (#11866035)
Absolutely! Get something working and then keep it working while making small steps.

On the other hand, the example that comes to mind is Ron Jeffries' TDD sudoku solver.

I've seen several systems where the magic black box is doing things hilariously wrong---as long as it works on the test cases and the production results are sufficiently difficult to verify, it'll be accepted as gospel.

Re:Mastering Programming: An Outline by dfraser992 on Wednesday June 08, 2016 @04:52AM (#11860897)
I agree. They all seem quite familiar, though more abstractly defined than I would define them. Perhaps that is why I am now a bit tired of development - too many new specific details to learn about the 'latest and greatest', but fundamentally it is all the same stuff anymore. Maybe I'll pick up Haskell, just to think in Lisp-ish terms again... But statistics and ML in general are now drawing me in - and I hated stats in college. Brand new concepts.

Like LoSboccacc said, all this stuff is in 'Code Complete' and the related series of books. Another I'd recommend is 'The Practical Guide to Structured System Design' and 'The Psychology of Computer Programming' (about egoless programming). Old books, but well written and perhaps seemingly basic considering how complex React/Node/javascript... seem to be, but the fundamentals never go out of fashion.

Re:Mastering Programming: An Outline by ObeyTheGuts on Wednesday June 08, 2016 @05:11AM (#11860953)
Absolutely disagree with you, slicing problems to small and focusing one at a time and all other good points is a must if u want to be good at any kind of programming and even more even other skills outside programming.
Re:Mastering Programming: An Outline by jondubois on Wednesday June 08, 2016 @05:47AM (#11861098)
Not if you have a hard deadline and your client is launching a massive advertising campaign for your product in a few hours. Also if your project is part of a promotional campaign, it will be up for a few months and then the whole thing will be torn down forever - You don't want to over-engineer it.

I only worked briefly in the digital agency space, it wasn't my thing. My workflow very much adheres to the points described in the article but I wouldn't say that they necessarily reflect all that it means to be a 'Master programmer'.

Re:Mastering Programming: An Outline by Joeri on Wednesday June 08, 2016 @06:40AM (#11861286)
It seems highly unlikely that nothing would be reusable across campaigns. Identifying the commonalities and isolating them into subprojects that you build out in small increments would seem to be a benefit.

In fact, I've been to a presentation by a digital agency on how they did exactly that and improved the time-to-launch on new projects as a result.

Besides, you don't want to overengineer anything. Refactoring will happen, so the design can be deliberately minimal at the start if proper refactoring practices can be applied.

Re:Mastering Programming: An Outline by dasil003 on Wednesday June 08, 2016 @12:32PM (#11863462)
If, by your original comment, you meant that if your project is simple enough you can muddle through like this, whereas with a large project you can't, I agree with you. But just because bad design doesn't scale up, does not mean that good design doesn't scale down.

The bottom line is good design is fractal. You absolutely need it to achieve the largest scale, but it pays dividends at any scale. While it's true there are a lot of cases where it doesn't matter, doing so will never make you a master programmer any more than chainsawing a log to make seats around a fire pit will make you a master carpenter.

Re:Mastering Programming: An Outline by _pmf_ on Wednesday June 08, 2016 @07:16AM (#11861433)
> This article should be called 'Mastering large-scale team programming'.

To be fair, that IS the hard kind of programming.

Small, focused teams of talented developers can do things pretty much as they like and are likely to have a positive outcome. (That's why I'm skeptical of typical "agile team" success stories; if you care enough about your job to identify with the methodology, you are probably a competent developer that would get results with mostly any methodology ... it's a self-fulfilling prophecy.)

Re:Mastering Programming: An Outline by Teeboo on Wednesday June 08, 2016 @08:56AM (#11861905)
You are correct, it's just that we wrote down those behaviours and practices used by successful teams and they became the agile values.

It's not self-fulfilling. It's fulfilling.

The same way Doctors wrote down the treatments that worked for patients and it became medicine.

https://www.youtube.com/watch?v=DHVVKAKWXcg

Re:Mastering Programming: An Outline by Teeboo on Wednesday June 08, 2016 @04:50AM (#11860890)
All spoken brilliantly as someone who has not seen the nuance beyond the post. The Facebook note was written by Kent Beck, father of eXtreme Programming (XP) and original Agile manifesto signatory.

He is not saying follow this methodology because a company made money.

Invert your thinking; he is saying the majority of companies that utilise the following values and techniques have far fewer failed projects and deliver far more projects to scope, meeting customer requirements in a suitable timeframe.

To say that this man needs to consider other approaches is akin to saying Muhammad Ali should have considered other boxing styles ;-)

Re:Mastering Programming: An Outline by plinkplonk on Wednesday June 08, 2016 @05:26AM (#11861023)
The man created a methodology [1]. That is wonderful but (imo) it doesn't give him the chops or credibility to tell other people how to program or solve problems.

Think about it.

Does Grady Booch (builder of yesterday's, now forgotten methodology) have some kind of special wisdom to dispense? If not why does Kent Beck? "Mastering" Programming, heh.

That said, sure no one can argue against such 'motherhood and applepie' statements at such a high level of abstraction.

Here is one from me "Think about what you do and act accordingly". you are saying "well duh?"? Exactly my reaction to this pablum.

Not sure any of these aphorisms are particularly relevant in practical work. Still, whatever makes people happy. If you find these useful, good for you.

[1] Not ignoring his work on JUnit which I used extensively when I used to work in Java. Of all the agile gurus, I respect Kent the most, because he has actually written useful code. Just playing devil's advocate a bit..

Re:Mastering Programming: An Outline by wpietri on Wednesday June 08, 2016 @01:13PM (#11863806)
> If not why does Kent Beck? "Mastering" Programming, heh.

He is also the person who (re-)originated test-driven development. And his day job for the last few years has been mentoring Facebook's new engineers.

And you ignore that he answered your question in the first paragraph of the piece. You might agree or disagree with his explanation, but ignoring it just looks sloppy.

Re:Mastering Programming: An Outline by plinkplonk on Wednesday June 08, 2016 @01:54PM (#11864122)
"From years of watching master programmers, I have observed certain common patterns in their workflows. From years of coaching skilled journeyman programmers, I have observed the absence of those patterns. I have seen what a difference introducing the patterns can make."

Is this the paragraph? I fail to see how such self declarations of uber competence and self labeling as "master programmer" should be accepted by others on his say so. Sure he originated/pushed TDD.(and what happened to that project on which all these 'masters' worked?) You seem to think it is a good practice, worthy of elevating Kent to 'master'. Which is fine I don't.

If his day job is to train FB engineers, and he enjoys it, good for him. If Facebook needs its engineers thus 'leveled up' by TDD etc, good for them. It is a free market.I have no quarrel with any of this.

However in my experience, the very best programmers (in any subfield of programming - Linus/Carmack/whoever, or even very good anonymous programmers working on simple CRUD systems) don't go around calling themselves 'master programmers',putting themselves at the top of imagined pyramids, or offering pithy aphorisms about how they can 'coach' other 'journeyman'(and so lesser skilled as compared to 'master' programmers) into 'mastery' by following "patterns".

This is just standard agile coach/methodologist talk. If someone calls himself a 'master' programmer, he better have world class code/coding skills on a consistent basis to back it up. Methodology religion propagation doesn't cut it (imo, ymmv and that is all right).

Re:Mastering Programming: An Outline by wpietri on Saturday June 11, 2016 @12:05AM (#11881998)
You are not so good with the reading. In that paragraph, he does not claim that he is a master. He claims that he has watched master programmers.
Re:Mastering Programming: An Outline by plinkplonk on Monday June 13, 2016 @02:46AM (#11892070)
He claims he coached 'skilled journeymen' programmers.

The 'master - journeyman-apprentice' pyramid jargon is part of the 'software craftsman' movement. In this structure, 'masters' train 'journeymen' who serve an 'appreniceship' and help them breakthrough into 'mastery. Lots of jargon from the old guild structures.

So Kent is implicitly (imo) claiming to be a 'master'. At the least he is claiming to better than "talented journeymen" engineers at FaceBook.

That said, I grant you he may be using the words without that implication. Not likely, but possible.

Whatever. All these agile/methodology guru types like to pass themselves off as skilled programmers without any supporting evidence and should be (imo) ignored totally when they pontificate about how others should program etc

YMMV. That's fine. Peace. Out.

Re:Mastering Programming: An Outline by wpietri on Monday June 13, 2016 @11:38AM (#11894711)
He is claiming to be a coach. Coaches don't have to be master players to be good coaches. The rest is stuff you are making up because you have an axe to grind.

Which, fine, grind your axes. But maybe you could stick to ranting about what people have actually done and written rather than just barking about things you imagine. For somebody very concerned about the credibility of others, you aren't working very hard on your own.

Re:Mastering Programming: An Outline by jondubois on Wednesday June 08, 2016 @05:06AM (#11860937)
Except we don't all do boxing and we aren't all Muhammad Ali. But some of us may be masters of our craft nonetheless.

These 'guidelines' would mean very little to someone who programs microcontroller chips - Not saying these guidelines aren't useful, but in some environments there are more important aspects like will my program fit in flash memory? Do I have time to refactor this code or should I just patch it quickly and work on something more urgent/important?

Re:Mastering Programming: An Outline by AnimalMuppet on Wednesday June 08, 2016 @12:16PM (#11863297)
> These 'guidelines' would mean very little to someone who programs microcontroller chips

I program embedded systems, which is pretty close. I still thought that the guidelines were spot on.

Re:Mastering Programming: An Outline by blub on Wednesday June 08, 2016 @07:36AM (#11861510)
I have no idea what it should be called, but it is too abstract and short to get any use out of it.

I'm not so sure about splitting developers into those types either. Sure, there are different personalities and specialisations out there, but... MVP programmer doesn't sound like one. It's too focused.

But I fully agree that "Facebook" doesn't automatically mean success and good practices, just like "well known person" doesn't automatically mean being right.