Forgot your password?
typodupeerror
Programming

Ask Slashdot: What Do You Wish You'd Known Starting Out As a Programmer? 548

Posted by Soulskill
from the how-to-program dept.
snydeq writes: Most of us gave little thought to the "career" aspect of programming when starting out, but here we are, battle-hardened by hard-learned lessons, slouching our way through decades at the console, wishing perhaps that we had recognized the long road ahead when we started. What advice might we give to our younger self, or to younger selves coming to programming just now? Andrew C. Oliver offers several insights he gave little thought to when first coding: "Back then, I simply loved to code and could have cared less about my 'career' or about playing well with others. I could have saved myself a ton of trouble if I'd just followed a few simple practices." What are yours?
This discussion has been archived. No new comments can be posted.

Ask Slashdot: What Do You Wish You'd Known Starting Out As a Programmer?

Comments Filter:
  • I think the main thing I'd change is I wish I had started becoming active in the open source community around the tools I commonly use. I spent the first 10 years of my career mostly working on my own, or with a few people on the job and was not connected at all with the greater community. I think if I had done so earlier I'd be a better programmer today

  • by Anonymous Coward on Thursday August 21, 2014 @01:32PM (#47722023)

    On my CS track, you start with C++, learn data structures and algorithms, and then learn assembly on a 68k.

    I can't think of a better way to discourage someone from learning how to code.

  • by Lilith's Heart-shape (1224784) on Thursday August 21, 2014 @01:35PM (#47722039) Homepage
    I wish I had known to pick a different trade instead of programming. Programming isn't a profession like law or medicine. It's a skilled trade like plumbing, masonry, or electrical work. But unlike plumbers and electricians, programmers aren't smart enough to unionize, and so they get fucked in the ass by management. If you have to live in the United States, don't become a programmer. There are better ways to earn a living.
  • History (Score:5, Insightful)

    by TechNeilogy (2948399) on Thursday August 21, 2014 @01:40PM (#47722083)
    I would have studied more about the history of computers and computer science. It would have kept me from re-making so many mistakes and re-inventing so many wheels.
  • How to write code (Score:5, Insightful)

    by DudeTheMath (522264) on Thursday August 21, 2014 @01:41PM (#47722093) Homepage

    Write like someone smarter than you will have to fix it ("Who wrote this crap? At least I can tell why he or she did that."), and like someone dumber than you will be adding features ("Bless him or her for making this easy."). You'll be both eventually.

  • by sinij (911942) on Thursday August 21, 2014 @01:44PM (#47722121) Journal

    If you mean the quality of code that gets churned by your average coder, then yes, it is just like plumbing.

  • Hindsight is 20/20 (Score:5, Insightful)

    by MagickalMyst (1003128) on Thursday August 21, 2014 @01:45PM (#47722141)
    I wish I had known how uninteresting and boring coding could be when working for a corporation. It was the ability to be creative and imaginative that made me fall in love with coding in the early eighties. Although I still work in IT, I generally don't code for companies anymore. And somehow coding has miraculously become very interesting once again!
  • by mark-t (151149) <`markt' `at' `lynx.bc.ca'> on Thursday August 21, 2014 @01:47PM (#47722171) Journal
    When I first started programming the 6502, back in 1981, I was still in school, and I was manually entering hex opcodes for every machine language program I wanted to create... I was doing this for about 6 months before somebody pointed out that I could use an assembler. I honestly didn't understand what they were talking about until I used one to type in a program that I saw in Nibble magazine. I never looked back. An assembler would have saved me *loads* of time if I had known about it at the beginning.
  • Re:Where to begin (Score:5, Insightful)

    by preaction (1526109) on Thursday August 21, 2014 @01:48PM (#47722179)

    • How to design a solution on my own time before I code a solution on company time.

    Though I inevitably unconsciously think about work code during non-work time, I will never consciously spend time thinking about or working on work code during non-work time.

    They are paying for my brain, they can pay me to sit and think for a while. The actual typing of code is not what programming is.

  • Grit (Score:5, Insightful)

    by jones_supa (887896) on Thursday August 21, 2014 @01:48PM (#47722183)
    I would have teached him grit. Oh god, how many unfinished little projects I had. Learn to concentrate on one thing and finish it properly. Just keep grinding on it.
  • by pscottdv (676889) on Thursday August 21, 2014 @01:50PM (#47722203)

    How to Win Friends and Influence People

  • by Rinikusu (28164) on Thursday August 21, 2014 @01:50PM (#47722205)

    One of the most difficult things I've had to come to accept as a developer is: If you see a 'clever' way to solve something, STOP. The sad fact is most programmers work on programming teams and you need to absolutely view yourself as expendable. Embrace mediocrity and find another outlet for your creativity. This could be personal projects outside of the workplace, or other hobbies altogether.

  • Simple (Score:5, Insightful)

    by geekoid (135745) <dadinportland@ya[ ].com ['hoo' in gap]> on Thursday August 21, 2014 @01:51PM (#47722217) Homepage Journal

    put every god damn penny you can into a 401k.
    Oh, you mean programming wise?

  • by ScentCone (795499) on Thursday August 21, 2014 @01:53PM (#47722239)
    Like, perhaps, English. So that he could - after all these years as a professional who types out strings of characters that very specific meaning - understand that when he says "could have cared less about my career," he means "could NOT have cared less about my career."

    Maybe he's been working all these years in languages that don't incorporate the concept of "not" or " ! " in evaluating two values. Are there any? I couldn't care less. Grown-ups who communicate or code for a living should be able to handle that one correctly.
  • Two things.... (Score:5, Insightful)

    by bobbied (2522392) on Thursday August 21, 2014 @02:01PM (#47722327)

    1. A copy of the "Mythical Man Month" by Fredrick Brooks and being told to read it.

    2. A set of closing prices for every stock on the NY exchange for the next 20 years with the advice to become an investment banker..

    If #2 isn't possible, then sitting down with somebody who could explain that you get what you negotiate, not what you deserve, so don't settle for what you get.

  • by Khashishi (775369) on Thursday August 21, 2014 @02:03PM (#47722357) Journal

    It's not unionized because conditions aren't bad enough to warrant it, as much as programmers like to complain.

  • by Jason Levine (196982) on Thursday August 21, 2014 @02:06PM (#47722381)

    The worst is when you handle old code and think "Who programmed this garbage", only to realize you did years ago.

    That's the bad part of growing as a programmer, you look back at your old code and see it as awful since you now know better. (It can also wind up making you think you're a horrible programmer because your old code looks so bad. It doesn't mean you ARE a horrible programmer, though, just that you are growing.)

  • 'weed out' classes (Score:4, Insightful)

    by oneiros27 (46144) on Thursday August 21, 2014 @02:13PM (#47722459) Homepage

    I wasn't a comp-sci major, so I don't know how common they are in that field ... but in engineering, you typically have a freshman class that's referred to as the 'weed-out' class.

    It's not supposed to be fun. It's supposed to be damned hard, so they can see who's got the fortitude to stick with it.

    Not all of life is going to be a cakewalk -- there are going to be times when you really have to knuckle down and study, and it's often better to get it over with early on than spend 3 years towards the degree and then find out that you can't cut it.

  • by idontgno (624372) on Thursday August 21, 2014 @02:13PM (#47722461) Journal

    You can ignore them, in which case you've volunteered for the role of "victim".

    You can make them your full-time job, in which case you're no longer a developer.

    You should find a good defensive middle ground. At least, some situational awareness. Put your head up and look around. And listen.

  • by Matheus (586080) on Thursday August 21, 2014 @02:15PM (#47722507) Homepage

    Sorry it sucks where y'all live.

    Minneapolis here. Getting 40 hours or keeping to 40 hours (whichever is your issue) is not a problem. Wages easily put you in a high standard of living. Of course cost of living is much lower here than any of the cities mentioned but that's part of the appeal of living here... more bang for your buck. Well that and everything else.

    If you really think it sucks everywhere that is not NYC/SF/Austin/Boston then you need to pay more attention.

  • by edawstwin (242027) on Thursday August 21, 2014 @02:17PM (#47722527)

    I learned C++ first and just kind of learned various languages and technologies as the need arose, and now I know several languages and my projects have been widely varied. But I noticed that most of my peers who specialized were much more in demand, and therefore pretty much had their pick of jobs, made more money, and had better working conditions. The kind of specialization I'm referring to is learning something that less than ~5% of programmers know, but is still in some demand, and likely to be in demand in ten or twenty years. Or if you pick something that many programmers already know, learn the shit out of that one thing so that there aren't many others that have your level of knowledge in that one thing. In an interview, impressive knowledge of something specific is always better than just adequate knowledge of many things.

    Also, learn how to be interviewed. It is a very valuable skill.

  • by geekoid (135745) <dadinportland@ya[ ].com ['hoo' in gap]> on Thursday August 21, 2014 @02:17PM (#47722541) Homepage Journal

    Coppea.

    "Individuals are above the collective,"
    That's moronic, and you don't actually believe that even if you think you do. Do you think my right as an individual means I can drive the wrong way down the freeway? dump toxic chemicals into your ground water? cut in front of you in line? PLay music at 140 db at 4 am?

    I can go on and on.
    It's a balance.

  • by Anonymous Coward on Thursday August 21, 2014 @02:17PM (#47722543)

    You think talking union is left-wing?

    Yes. So does the rest of the world.

  • by Anonymous Coward on Thursday August 21, 2014 @02:22PM (#47722599)

    If you mean the quality of code that gets churned by your average coder, then yes, it is just like plumbing.

    Of course! And you are above average, I take it.

    See, this is the type of attitude that makes me really hate this profession.

    My code has been called brilliant - even genius - and the same code has been called crap by a different person.

    Personally, I would never want to work with or for the parent.

    Does the code work as designed?

    Is it easily readable and maintainable?

    If yes to both then STFU and go back to your Cheetos and Coke.

  • by twdorris (29395) on Thursday August 21, 2014 @02:23PM (#47722605)

    I wish I had learned to balance real life with coding life sooner. I used to do the same zillion hour marathons everyone else did at one point or another in their coding careers. I loved the challenge and being the one producing the results. But then, eventually, I realized there's really a LOT more out there than that tiny little challenge/reward cycle. Biking, hiking, sports with friends, whatever. You can easily burn through 10-15 years of your YOUNG life living the code only to realize later when you're not so young any more that there were TONS of things you would have enjoyed doing more. You can make up some of that, but not nearly all.

  • by Stormy Dragon (800799) on Thursday August 21, 2014 @02:27PM (#47722651) Homepage

    Unions are themselves corporations. Private sector unionization has stagnated because being in a union to often just means you end up with two corporations screwing you over.

  • by Matheus (586080) on Thursday August 21, 2014 @02:30PM (#47722683) Homepage

    Oh and PS: To a few layers up poster...

    "programmers aren't smart enough to unionize" are you kidding me? To be clear I am not anti-union by any means but for my job not on your life. I'm sure life is different in the valley or big code farms elsewhere but honestly I am better equipped to negotiate as an individual than within a group. The world changes and as development becomes more commoditized this situation may change as well but I don't see that anywhere in the near future. (read my employment lifetime) when my threat as an individual to walk away carries as much weight as a union making the same threat there is no perk to the tradeoffs.

  • by Lilith's Heart-shape (1224784) on Thursday August 21, 2014 @02:32PM (#47722705) Homepage
    Last time I checked, the USA isn't the rest of the world, and in most Western countries the Democrats would be a right-wing party.
  • by DERoss (1919496) on Thursday August 21, 2014 @02:39PM (#47722783)

    I went to work for System Development Corporation (SDC) in 1969. SDC was actually the company that established computer programming as being distinct from building computers; before then, the only people programming were the engineers who built the computers. SDC was a good company with good pay and good benefits. Then, SDC sold itself to the Burroughs Corporation, which succeeded in a hostile takeover of Sperry Univac and became Unisys.

    At Unisys, we found ourselves in an environment that treated highly experienced technicians and professionals as if we were assembly line workers. Unisys even imposed work rules on us salaried employees that are actually legal only for hourly wage-earners. I should have recognized the abuse sooner than I did and "jumped ship". I could have timed a change for when shortage of software experts made job jumping very profitable. Instead I stuck it out until mass layoffs were very near.

    When Burroughs and Sperry Univac merged, the resulting Unisys had more than 120,000 employees. Today, Unisys has less than 25,000.

    I must disagree with the replies that indicate programming is poorly paid. I earned sufficient pay that I was able to retire very comfortably before I was 62.

    I would suggest that programmers learn how to test rigorously the software they create. This requires that they also write software specifications that are testable, after which they should learn to write formal test procedures. They can then advance into becoming requirements analysts and software test engineers (except in states where "engineer" is a career that requires a license). There are too few analysts and testers, who are often paid much more than programmers. Large computer-based projects are failing because of a lack of clear, objective, and testable specifications. Attempts to put those projects into actual use are disastrous because of a lack of testing.

    For some details about my career, see http://www.rossde.com/retired.... [rossde.com].

  • by Nemyst (1383049) on Thursday August 21, 2014 @02:42PM (#47722811) Homepage
    I'd argue that while it's a nice table, there's one critical flaw with it: it doesn't matter this much if you don't know everything listed, provided that you can learn it on the spot in a fairly short period of time. For instance, I remember having read about red-black trees or how to treat hashmap collisions and I've already programmed in prolog and so on, but do I remember all those things so well that I could immediately, without looking at a reference, know how to implement/work with them? Hell no. There's way too much to learn in computer science to ever hope knowing everything at once, and claiming that this should be the case (or even, that it is achievable) only serves to demoralize and misguide people.

    In my mind, there are two core qualities in computer science (and really, in science in general): being adept at solving problems, and being able to learn new things all the time. The former lets you break down any specific problem in a set of more generic problems for which solutions can be found or designed. The latter means you're able to learn new solutions to problems you may be unfamiliar with.
  • by angel'o'sphere (80593) on Thursday August 21, 2014 @03:19PM (#47723103) Homepage Journal

    Unfortunately his list contains a lot of "don't need to know"s and also has lots of flaws.

    E.g. "code organization within a file" highest level: each file has a license header ... erm, why?

    "Defensive Coding" ... highest level is bollocks, so is his view on version management, and on IDEs and APIs and the third level of "Scripting" makes me ROFL, 4th level of databases, all level s of "languages with professional experience", or all of "domain knowledge".

    Many fields in the matrix look like: "uh, what do I put here?" and then he put some random stuff into it.

    E.g. 4th level of "platform internals", erm seriously? I'm an "expert" if I write my own disassembler instead of using the platform provided one? WHY WOULD I DO THAT? Especially as writing a disassembler is not really a challenging task, it belong either into the tools section or the "systems programming" section, at level 2 at max.

    Ah, "systems programming" level 4, 'microcode' ROFL. That guy certainly has no idea what microcode actually is. I guess I rather black list that page then keep shaking my head about his strange views.

  • Re:Quite simply... (Score:5, Insightful)

    by Wraithlyn (133796) on Thursday August 21, 2014 @03:38PM (#47723247)

    OK, I'll bite. :)

    In a Perfect World, tabs would indeed be superior to spaces. No question.

    But in the Real World, tabs and spaces inevitably get mixed together as multiple people touch a project, and then indentation gets messed up.

    Standardizing on spaces helps mitigate this, as everyone sees the exact same thing regardless of editor (whereas tab spacing typically depends on local editor settings). And any editor should be able to "use spaces for tabs" so there is no actual impact on developer effort.

  • by geekoid (135745) <dadinportland@ya[ ].com ['hoo' in gap]> on Thursday August 21, 2014 @04:29PM (#47723649) Homepage Journal

    My Dues, 30 a month.
    I get 6 weeks vacation, great sick time, and fantastic benefits.
    I make 6 figures.

    I work 4 tens, any after hours work is billable, being on call is billable. If I give a profession opinion or fact I can't be fired is it happen to be contrary to what some VP wants. Yes, I was fired for explaining why something wasn't possible to a VP. With facts and number and even maths. Yes, I was polite. Hell, once I was reprimanded for putting people in the wrong order in a cc in an email when I worked in the financial sector.

    Working 40 is the minority of programmers schedule.

    "That's ignoring the risk of the union making it hard to get rid of the people who sincerely need to go,"
    I seen people let go. There is a process here, and it's a reasonable one. Warning, write up, write up with correction plan, fired.
    It prevents people for getting fired for political reasons, and it also lets people know when their performance has dropped.
    As a side note, I got a warning for my performance dropping. Since I normally evaluated as high as possible for my work, this lead e to finding out I was suffering from depression.
    I've seen people join the union and think it's like the urban myth of the union. They don't last long.

  • by TXG1112 (456055) on Thursday August 21, 2014 @04:41PM (#47723721) Homepage Journal

    enough of a Randroid to want to give people their money's worth.

    Oh the irony.... Your individual contributions have negative value if they cannot be used and leveraged by the entire project/team. No one is an island. Software development is a team sport and there is nothing more useless than a cowboy who doesn't believe they have to follow standard process and methods.

  • by Actually, I do RTFA (1058596) on Thursday August 21, 2014 @04:58PM (#47723881)

    Pascal was a good choice of learning language. Now that OOP has proven out, Java is a good choice. Stay away from the rest until you're competent in one of those two.

    If you don't start out dealing with hand-managed memory, you don't learn how memory works. Which means you do stupid shit later.

  • Re:What to know (Score:5, Insightful)

    by ObsessiveMathsFreak (773371) <obsessivemathsfreak@@@eircom...net> on Thursday August 21, 2014 @05:07PM (#47723939) Homepage Journal

    Your outdated "value-adding" "service provding" skills are so 20th century. 21st century careerism is about networking. Networking. Networking. Netowrking.

    Look at item number one on TFAs list.

    1. Take names. ...

    In five to 10 years, that will all be different and the person who you ignored because they were boring and couldn't help you will be the person who could have won you an important opportunity.

    Network! Impress people! Dress right! Booze people up! This is how successful companies are made. You will not attract the rright venture capital with your simple abilities. Most companies won't even use those anyway.

    2. Problem solving. .....

    Problem solving is essentially the same thing you learned in abstract in seventh or eighth grade or whenever you learned simple algebra.

    See! Look at this! The people this guy is writing for don't even know how to solve problems. They just code stuff nobody really needs -- and they're still successful! You think your ability to analyse and abstract is something all the cool kids will pay for? Think again. Your geek/nerd/hipster/bro-grammer cred wil matter far more.

    6. Work more than 40 hours per week.

    Profession? You think programming is a profession. Get back on that hamster wheel and like it code monkey. And get some hair dye. First sign of a grey hair or stress line from yellow packs like you and we sack you and hire a fresh young grad to suck into a husk.

    5. Think in terms of a career, not a series of jobs.

    Translation: "You can either join the fed-money, app-cloud bullshit wagon, or you can learn to love foodstamp lines. Either way, it'll still be a superior outcome to any science-fiction fantasy you imagined programmers were capable of making in a rational universe. The Market wants fart-buttons, not robots, so drink the kool-aid or join the lowest caste of contract workers you, you, you..... Loser."

    No wonder so many programmers go into management.

  • Advise (Score:4, Insightful)

    by Bill, Shooter of Bul (629286) on Thursday August 21, 2014 @05:21PM (#47724039) Journal

    I wish when I was starting out, I knew how idiotic it would sound to tell everyone what I wished I knew when I was starting out. Cause, man, does it sound stupid.

    Come children, let me pretend to be wise by telling your really obvious things I was not aware of when I was your age.

  • by Spazmania (174582) on Thursday August 21, 2014 @06:21PM (#47724429) Homepage

    I disagree. Learn how to program in a well structured manner that other programmers have some hope of following when they read your code. THEN learn how to juggle memory while programming in a structured manner.

    If you haven't written code in C and assembly, you're not yet a computer scientist. But don't start there! Learn addition and subtraction before you learn algebra and learn Java or another learning language before you learn C.

You can do this in a number of ways. IBM chose to do all of them. Why do you find that funny? -- D. Taylor, Computer Science 350

Working...