Slashdot Mirror


Ask Slashdot: Transitioning From 'Hacker' To 'Engineer'?

antifoidulus writes "I'm about to get my masters in Computer Science and start out (again) in the 'real world.' I already have a job lined up, but there is one thing that is really nagging me. Since my academic work has focused almost solely on computer science and not software engineering per se, I'm really still a 'hacker,' meaning I take a problem, sketch together a rough solution using the appropriate CS algorithms, and then code something up (using a lot of prints to debug). I do some basic testing and then go with it. Obviously, something like that works quite well in the academic environment, but not in the 'real world.' Even at my previous job, which was sort of a jack-of-all-trades (sysadmin, security, support, and programming), the testing procedures were not particularly rigorous, and as a result I don't think I'm really mature as an 'engineer.' So my question to the community is: how do you make the transition from hacker (in the positive sense) to a real engineer. Obviously the 'Mythical Man Month' is on the reading list, but would you recommend anything else? How do you get out of the 'hacker' mindset?"

446 comments

  1. srsly by Anonymous Coward · · Score: 0, Insightful

    the heck are you talking about? nobody in the 'real world' is any different. hacker? give me a break dude.

    1. Re:srsly by Anonymous Coward · · Score: 5, Insightful

      >nobody in the 'real world' is any different

      And the public wonders why most software is bug-ridden, badly designed shite.

    2. Re:srsly by Anonymous Coward · · Score: 0

      Yeah this. Even as a pos "operator" in my teens, we'd have crap cobbled together by some moron programmer that couldn't get it 100% right in test and stick the fix they were called in for into production the same night if something critical crashed. In a few hundred employee company. It's all hacking, don't imagine it's not and psych yourself out.

    3. Re:srsly by crutchy · · Score: 1, Insightful
      And the public wonders why most software is bug-ridden, badly designed shite

      only a problem for software you pay good money for
      with proprietary closed source software, users pay to become beta testers because not only are there less eyes on the source compared to the FOSS model, but closed source projects are run on unrealistic timelines and budgets. software companies make software to maximize profit, not to produce bug-free product. they do enough debugging to minimize complaints to a point where they can maintain their reputability, but no more. once the release date is reached, the product moves from development to sales, and the development team moves onto the next product.
      FOSS is often a step behind, but that is because there is no such pressure to achieve marketing deadlines or breakeven, because there is no profit, but this also means that the programmers are free to take as long as they like to debug the software to their own satisfaction, and like any art or skill, programmers can be their own worst critics, particularly if they are developing software they wish to use themselves
      I don't think I've ever come across an actual bug in a FOSS application because I stick with Debian Stable mostly (sometimes Testing), but even if a program misbehaved, I would be disappointed but given I paid nothing for it, I can't really complain that much. On the other hand, if I pay for a Windows game (Sim City 4 for example) and it crashes regularly on a newish machine and web searches don't reveal an answer (and the vendor's website is a useless piece of shit), I'm going to be pissed off for wasting my money.

      In response to the OP, I don't have a CS degree but I develop software in my job (engineering), as well as at home. I must admit I've never debugged on paper before (is that what you meant by "prints"?). I usually just get a feature to a stage where I think it should work, and then I compile/test the crap out of it, finding/fixing bugs as I go. Its much more fun and practical than looking for bugs that might not exist on paper. Maybe its just because I'm not that old, but I couldn't even imagine debugging on paper.
      I wouldn't call it "hacking" though. I think its actually called "extreme programming" or "agile software development".

      http://en.wikipedia.org/wiki/Extreme_programming

    4. Re:srsly by turbidostato · · Score: 5, Interesting

      "with proprietary closed source software [...] compared to the FOSS model"

      I think you are mistaking possibilities with realities. Yes, open source has the *potential* to more eyeballs but then, all so much FOSS projects have are the two eyeballs from its only developer. Yes, FOSS has the potential to get rid of absurd timelines but then you see so many projects that deliver on a deadline, ready or not ready, or answer you about a bug report with a variant of "I don't have time to deal with old bugs, I prefer to expend my time on more bug-ridden features". Yes FOSS is not necesarily driven by maximizing profit, but they aren't necesarily driven by its quality (i.e.: they can be driven by it fun factor).

      "because there is no profit"

      Who told you that? That's obviouosly false. They can and certainly are for profit in a lot of situations, it's only that their revenue stream is not on selling use licenses but in the development fact itself (features on demand; I worked for a company like that -the problem is when this becomes a freemium model where known to be necessary features are not developed unless something pay for them) or in installation and support (and then it can be possible that never good install procedures or documentation will ever be produce).

      "I wouldn't call it "hacking" though. I think its actually called "extreme programming" or "agile software development". "

      But then antifoidulus is right: hacking something together and pushing it into production is, well, hacking and certainly has nothing to do per se with extreme or agile programming. Your approach can lead to a good solution (if the problem realm is not so difficult and you are good at it) as well as to a fast pile of shit that only worses as time and feature crap goes by. As such is the opposite to engineering, which is about insure the results.

    5. Re:srsly by crutchy · · Score: 1

      I think you are mistaking possibilities with realities

      You're right, but there are for example lots and lots of eyeballs on the Linux kernel source. Also, at least FOSS has this possibility (and while not always being reality, it is sometimes).

      Yes there can be profit in FOSS, but its not usually from the software itself (by definition "free" as in usually both "free beer" and "freedom"). Profit for companies dealing with FOSS is usually from selling boxed versions of the software, documentation or support contracts. The "features on demand" that you mentioned, if sold for profit, aren't really FOSS are they (even if the underlying application is FOSS).

      Hacking has evolved beyond the original "tinkering" definition of yesteryear. It's now associated with unauthorized access.

      From http://www.extremeprogramming.org/ "instead of delivering everything you could possibly want on some date far in the future [extreme programming] delivers the software you need as you need it". "Hacking something together and pushing it into production" might not adhere to all the rules of extreme programming, but I think it fits the extreme programming model well enough, particularly for in-house development where the customer and the developer both work within the same company.

      As such is the opposite to engineering, which is about insure the results.

      As long as any software produces the correct result, how it achieves it is usually of secondary importance. Many people with CS degrees focus too much on the "how".

    6. Re:srsly by beowulfcluster · · Score: 4, Informative

      I must admit I've never debugged on paper before (is that what you meant by "prints"?). I usually just get a feature to a stage where I think it should work, and then I compile/test the crap out of it, finding/fixing bugs as I go. Its much more fun and practical than looking for bugs that might not exist on paper. Maybe its just because I'm not that old, but I couldn't even imagine debugging on paper.

      He means running it and seeing what happens by adding lots of System.out.println();s or whatever the language of choice equivalent is instead of using a debugger. Well, I assume that's what he means.

    7. Re:srsly by gnasher719 · · Score: 1

      You're right, but there are for example lots and lots of eyeballs on the Linux kernel source. Also, at least FOSS has this possibility (and while not always being reality, it is sometimes).

      Where I work, there is the nice principle that for every bit of work there have been at least four eyeballs seeing it, and probably more. Guaranteed. Not just a possibility.

      We can also use a mathematical argument: What is the total time that people spend reviewing FOSS code? What happens when code is so badly written that you can't effectively review it (with my code, that would just make it unaccetable).

    8. Re:srsly by crutchy · · Score: 1

      What is the total time that people spend reviewing FOSS code?

      probably nobody knows the answer to that question (I don't see any mathematics in it though), but I would guess that a lot more people have reviewed various aspects of the Linux kernel source than Windows kernel source, even solely from the point of view that Linux used in any critical task would probably require at least some review by any organization relying it (probably including NASA, DoD, Google, Red Hat, IBM, etc). Even aspects like competition with Windows and the controversy surrounding patents and copyright violation in the Linux kernel would have attracted eyeballs, with Microsoft most likely looking for bugs and exploits to use in smear campaigns. Then there is the embedded market, with set top box manufacturers likely having a squiz at aspects that affected the functionality of their hardware. The Linux kernel is probably the crowning achievement of the FOSS community because despite being free, it is worth so much to many organizations that depend on it that the many scrutinizing eyeballs on the Linux kernel are probably less interested in the kernel as a product itself, but as something that will cause significant grief (financial and otherwise) if it fails. Windows on the other hand presents a risk to any organization who selects it for a mission critical app because they can't inspect the source code and the organization has no control over it (whereas if a bug was found in the Linux kernel, its possible that an in-house patch could be "hacked" together to get things moving again.

      What happens when code is so badly written that you can't effectively review it

      When you can't review it, you test it, but I would never personally use code I couldn't understand. If it was the only code I could find that did what I wanted, I would probably spend the time reinventing the wheel. Having said that, if the code worked and was accessible, even if poorly presented you should still be able to read it. I would argue that the likelihood of there being code that couldn't be reviewed at all would be pretty slim (its just text). Even if I had to use one of those programs that improves presentation (puts line breaks after non-string semicolons or after "then" in the case of Pascal/Delphi etc), or I could roll my own if I didn't like any on the net. Poorly written code also probably wouldn't last long in a public FOSS project (sourceforge, github, google code, etc) in a team of programmers who actually gave a crap.

      FOSS programmers review FOSS code, because it can improve their skills or can be used in their program (GPL code can be reused in other GPL projects), and there are a lot of FOSS programmers out there (look at the Debian package repository for example).

    9. Re:srsly by Anonymous Coward · · Score: 2

      >nobody in the 'real world' is any different

      And the public wonders why most software is bug-ridden, badly designed shite.

      Insightful? Really? This is exactly the opposite of Insightful.

      The difference between Science and Engineering is perfectly illustrated here. Computer Science is NOT Software Engineering! Engineering is applying theory and high-level ideas in the real world nitty-gritty land of bullshit where nothing really ever works 100% how it theoretically does, and you have to make seemingly impossible solutions "just work right now, goddammit!".

      To the submitter- sounds like you're already on the right track. "Hacking" (I see you're using the old definition, not the modern one) is exactly the skillset you need to be an Engineer. CS is helpful to software engineering, as it provides a good foundation of understanding, and gives you the knowledge of how things ought to work. But as for how to actually approach a real-world Engineering situation, CS isn't going to provide you with much at all in the way of the skills you'll need to design, deploy, troubleshoot, and implement Management's twisted desires.

    10. Re:srsly by tehcyder · · Score: 1

      I wouldn't call it "hacking" though. I think its actually called "extreme programming" or "agile software development".

      See, it's not just PHBs who can play buzzword bingo.

      --
      To have a right to do a thing is not at all the same as to be right in doing it
    11. Re:srsly by craigtp · · Score: 4, Interesting
      And the public is correct. Most software *is* "bug-ridden, badly designed shite".

      I'm a software developer by trade, and I'm also old enough to be of the generation where one has pride in one's work but, in my experience, many places where I've worked don't seem to share that same pride in a job well done. Most care far more about getting something, no matter how "bug-ridden" or "badly designed" out of the door so they can bill the customer.

      I always remember this quotation from the great Niklaus Wirth:

      In a well known interview with Dr. Carlo Pescio, published in Software Development, June 1997, Pescio asks Wirth:

      You probably know about the 'good enough software' concept popularized by Yourdon. In many senses, it's just a rationalization of what's happening in the software world: the first company hitting the market with a feature-rich product is more likely to win the battle than the careful, quality-seeking company. Do you think there is anything developers and software organizations can do about that? I guess many developers would be happy to be given more time to develop better software, but at the same time they are rushed in the name of corporate survival. 'Educating the users' seems more a wild dream than a possibility.

      to which Wirth replies:

      'Good enough software' is rarely good enough. It is a sad manifestation of the spirit of modern times, in which an individual's pride in his/her work has become rare. The idea that one might derive satisfaction from his or her successful work, because that work is ingenious, beautiful, or just pleasing, has become ridiculed. Nothing but economic success and monetary reward is acceptable. Hence our occupations have become mere jobs. But quality of work can be expected only through personal satisfaction, dedication and enjoyment. In our profession, precision and perfection are not a dispensable luxury, but a simple necessity.

    12. Re:srsly by geekoid · · Score: 1

      And the reason it
      s poorly made is the hacker mentality.
      Just 'write code and it works' and it is done. The industry must mature past that and move on to actually engineering. The software industry must become an industry of excellence.

      --
      The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    13. Re:srsly by lorenlal · · Score: 1

      ^This

      The fact that you take the time to actually design something sensible, and are willing to go through some debugging and personal testing pretty much puts you in the development/software engineering pack. The best thing to do is keep working at it, and if you really want to go through the "official seal" of software engineering, you'll need to address it through process.

      Make sure the design documents are put together as living documents (maintained throughout the lifecycle). Get your versioning system in place. Make sure the testing team has awareness and a way to properly validate software quality, and that all possible code paths are covered in the testing process. But as far as you are concerned, you'll need to use what you've learned to either fit into the processes, improve them, or create a working process.

    14. Re:srsly by Anonymous Coward · · Score: 0

      call it the poor mans debugger, i have worked with a lot of languages that didn't have a good debugger and so doing System.out.println();s, or that languages equivalent, was the only way.

    15. Re:srsly by TooTechy · · Score: 1

      Ensure of insure?

    16. Re:srsly by Frederic54 · · Score: 1

      I agree, I am like the OP, hacker who got a master's in CS, and I code roughly the same, by intuition.

      --
      "Science will win because it works." - Stephen Hawking
    17. Re:srsly by morgauxo · · Score: 1

      Yes, but the public also expects timely releases. Large customers expect their own pet features and they expect them yesterday.

    18. Re:srsly by chuckugly · · Score: 1

      Linux used in any critical task would probably require at least some review by any organization relying it (probably including NASA, DoD, Google, Red Hat, IBM, etc).

      Organizations of that size often also get to review closed source code before using the product in question.

    19. Re:srsly by whoda · · Score: 1

      Because Computer Scientists who think they are Software Engineers write it?

    20. Re:srsly by Marxist+Hacker+42 · · Score: 1

      Because you're not that old, you're not familiar with the Debug.Print command, which has been implemented in every language I'm familiar with in some way. Think of it as a IDE variable watch that outputs to a scrolling list.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    21. Re:srsly by Marxist+Hacker+42 · · Score: 1

      There's an old joke about a theoretical physicist who solved the problem of the chicken and the egg. Problem was though it only worked with cubical eggs and spherical chickens.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    22. Re:srsly by Marxist+Hacker+42 · · Score: 1

      This would require management moving beyond the mindset that any software project that is in R&D for more than four months is a failure (because three months is the SEC reporting cycle, and therefore, any project that isn't turning a profit by the next reporting cycle is a failure).

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    23. Re:srsly by Hognoxious · · Score: 1

      Management's twisted desires.

      They're the ones paying your wages, you drooling fuckwit.

      Nope, that's the customers. Management are just the conduit - and a leaky one at that.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    24. Re:srsly by turbidostato · · Score: 1

      "You're right, but there are for example lots and lots of eyeballs on the Linux kernel source. Also, at least FOSS has this possibility (and while not always being reality, it is sometimes)."

      So how is that any different from what I said?

      "Yes there can be profit in FOSS"

      Of course there is.

      "but its not usually from the software itself"

      Quite on the contrary, it is usually from the software itself. Where it is usually not the case is in the closed source camp. Usually the revenue for closed source software developing companies comes from anywhere else but the software, typically, the licenses. The open source software developing companies, on the other hand, more times that not get their money from the very exercise of developing software itself.

      "(by definition "free" as in usually both "free beer" and "freedom")"

      By *YOUR* definition, you mean. In every other case, FOSS is about "free as in freedom" disregarding if it is "free as in beer" too or not.

      "The "features on demand" that you mentioned, if sold for profit, aren't really FOSS are they"

      Of course they are, how they couldn't be? I don't think you understood -which, by the way is no surprise since it seems the vast majority of people seem not to be able to grasp that the main source of revenue for a programmer and, by extension, for any company centered around software development should be... developing!

      The company developed a somehow niche application and published it under an open license (GPLv2). Each time the company gets a contract to develop new functionality for the product it goes open source to the main product, which in turn makes it more attractive to new customers. Rinse and repeat. Add to that 24x7 managed services and support for the product and there you have a business plan.

      It might happen the day comes that no new features are desired for the product (it's still far away but it might happen). On one hand this company is still the worldwide expert for the product so even in its "dog" phase it still will bring revenue for the company. On the other hand, part of the benefits during the "cash cow" phase are derived to R+D to create the next application to repeat the strategy.

      "Hacking has evolved beyond the original "tinkering" definition of yesteryear. It's now associated with unauthorized access."

      That was obviously not the meaning attributed by antifoidulus when sent the question.

      ""Hacking something together and pushing it into production" might not adhere to all the rules of extreme programming,"

      It is not that it doesn't adhere to some rules but that it is against its very spirit. I won't consider here that all these "extreme" chaff is more about managing people's expectations than project management but on its technical side is about *guaranteeing* enough quality and serviceability despite the speed: it is the realm of unit testing, of continuous delivery and of standards adherence.

      "As long as any software produces the correct result, how it achieves it is usually of secondary importance."

      Exactly. And to insure this to happen quite a lot of things have to be considered, the main one being what the "correct result" is to start with. For a long running project part of the "correct result" necessarily is how maintainable is in the long run; for a highly distributable one, how deeply coupled or how scalable its elements are, etc.

      And, in the end, any engineering is not about if it produces the correct result but how likely is in advance that the correct results *will* be produced. And, regarding software, that's the difference between hacking and engineering.

    25. Re:srsly by crutchy · · Score: 1

      I very much doubt that any organization would be allowed to review Windows kernel source code (regardless of budget), but we might just have to agree to disagree there.

    26. Re:srsly by crutchy · · Score: 1

      The company developed a somehow niche application and published it under an open license (GPLv2). Each time the company gets a contract to develop new functionality for the product it goes open source to the main product, which in turn makes it more attractive to new customers. Rinse and repeat. Add to that 24x7 managed services and support for the product and there you have a business plan.

      you forgot the bit about how you actually make money from that, given that your "customers" are free to seek extensions from elsewhere after pillaging your freely available "main product" source code. seems like a pretty risky business model (particularly if you have greedy shareholders to look after), but I don't work for a FOSS "company", so ok.

      other FOSS companies (MySQL AB, Red Hat Inc, Canonical, etc) sell support contracts, which may include development of extensions, but their "main product" is released for free (as it must under GPL terms).

      on its technical side is about *guaranteeing* enough quality and serviceability despite the speed: it is the realm of unit testing, of continuous delivery and of standards adherence.

      no, its about focusing on incremental results and allowing for changing requirements. perhaps you've never tried it (since you don't seem to have much regard for it)

      main one being what the "correct result" is to start with

      clients rarely know exactly what they want at the start of a project (they'll give you a highly subjective and obscure top level goal written in management-speak because that was who it had to convince in the first place to get a budget for it, and then "you're the engineer so you go figure it out" is usually what follows). what client talks about results in terms of maintainability or scalability? they are usually interpreted as requirements by the engineer from the various meetings with the client that never actually feature those words.

      any engineering is not about if it produces the correct result but how likely is in advance that the correct results *will* be produced

      i can tell you as a professional mechanical/structural engineer that if you're not sure that you'll produce the correct results in advance, you shouldn't be an engineer in the first place. as someone who also develops engineering software, if you only focus on the final result from the beginning, you will never finish your project because the final result always evolves, especially if you want to stay in business (its called shifting the goal posts, and managers in every organization are exceedingly good at it). if you spend a lot of money developing something that achieves a specific objective, when the client says they want to change something, your contract will lose some of its appeal because it will cost them more to change than a contract that provides flexibility via extreme programming

    27. Re:srsly by Aighearach · · Score: 1
    28. Re:srsly by turbidostato · · Score: 1

      "you forgot the bit about how you actually make money from that"

      I told you: by contracting on the development of new functionality (and engineering the solution, and deploying and supporting it). This is not an idea: this is already working.

      "given that your "customers" are free to seek extensions from elsewhere"

      Truly. That's as true as that you can go to Seven Eleven searching to hire quantum mechanic experts. Quite a different issue is if you'll find them there. We are talking here about a non trivial piece of software, and it happens that this company know it in and out and have the marketing and sales strengh to push for it. Not many other companies can say the same but, hey, the market is free both for the customer and the provider. If they find a better bargain, lucky them.

      "after pillaging your freely available "main product" source code."

      The Merriam-Webster define "pillage" as "the act of looting or plundering especially in war" or "something taken as booty". Given that this company wholeheartedly gives the source code to its customer under the GPLv2, I fail to see
      where the pillage exactly is.

      "seems like a pretty risky business model"

      In fact it isn't, given that most service companies use it in that they attract money as they work for it and money stops flowing the day they stop working... or it wouldn't be a risky business were it not for others that use their strengh not in making better products but in lobbying legislation for clearly anticapitalistic practices (like creating artificial scarcity by means of government-granted monopolies on IP).

      "perhaps you've never tried it (since you don't seem to have much regard for it)"

      Or perhaps my regards about extreme practices come from a deep study of what they mean and how they are implemented, who knows.

      "i can tell..."

      All well and good and absolutly orthogonal to the issue at hand. But, hey, it's you the one asking "what client talks about results in terms of maintainability or scalability?" and I was the one telling that agile practices were more about managing people's expectations than anything else.

    29. Re:srsly by MarkusQ · · Score: 1

      I very much doubt that any organization would be allowed to review Windows kernel source code (regardless of budget), but we might just have to agree to disagree there.

      From personal professional experience I can think of at least two organizations (both rather large) that have access to the full MS Windows source, and suspect there are quite a few I don't know of. Both maintain considerable organizational controls around access to the source (contractually obligated, I suspect). I'm not sure what my non-disclosure agreements say about the two cases I know of, but a quick google turns up several other examples (that I personally know nothing of) such as:

      http://www.informationweek.com/news/software/operating_systems/225400063

      http://www.zdnet.co.uk/news/security/2010/07/08/microsoft-opens-source-code-to-russian-secret-service-40089481/

      ...and even a link to how you ask for it yourself:

      http://www.microsoft.com/licensing/software-assurance/enterprise-source-licensing.aspx

    30. Re:srsly by crutchy · · Score: 1

      i do the same thing. i just avoid VB wherever possible. all other languages i use call it something else, though php has print_r. i've been a bit spoiled having delphi (object pascal is probably the most strict and typecast language i've used, which makes debugging much easier)

    31. Re:srsly by Marxist+Hacker+42 · · Score: 1

      Well, then Debug.writeln; I code in a wide variety of languages, but I'm currently paid to code in VB.

      I find actually I get more errors the more strict the typecasting is, as a rule. I absolutely hated COBOL, where even your comments are syntax checked.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
  2. Reading List by Anonymous Coward · · Score: 5, Informative

    Add Code Complete to the reading list as well as The Pragmatic Programmer

    1. Re:Reading List by dutchd00d · · Score: 5, Interesting

      Add Code Complete to the reading list as well as The Pragmatic Programmer

      Replace Code Complete with "The Practice of Programming" by Kernighan and Pike (yes, that Kernighan. Yes, that Pike) and you've got something. You can keep Code Complete for when you can't sleep (IMHO, YMMV).

    2. Re:Reading List by Anonymous Coward · · Score: 0

      Working with very large teams

      1. Learn design patterns
      2. Learn source control (if you don't)
      3. Learn there is more to products than engineering

    3. Re:Reading List by Chatsubo · · Score: 5, Insightful

      I scrolled down just to see if someone suggested Pragmatic Programmer, AC deserves a +1 billion mod. If you read just this one book, and apply it, you'll be head and shoulders above most of the industry in one foul swoop.

      Secondly, you already know this answer by the way you phrase your question: Stop doing prints for debugging and use a debugger, that's it's job. You'll remove years of pain and anguish from your working life. Anecdotally: our "debug by print" hire gave up trying to keep up with the "debugger guys" after only a few months and left the company voluntarily, despite our suggestion that his debugging methodology is painfully slow.

      Test driven development. Hackers say "but it takes more time to write the tests", I say: "But it saves me a butt-load of time tomorrow, it's a net win that will keep on giving". Moreover, TDD tends to result in cleaner designs anyway. I take this a bit further: If I have to write a new concept into a huge system, be it big or small, the first thing I do is write a smaller test with the new concept, iron out all the bugs and kinks until I understand the problem and solution properly, only then I dig into the "big code". Once again it's about saving myself time and headaches. (and, of course, try to write a module or component I could re-use in a similar situation)

      Learn as much as possible about dependencies. Also the difference between library code and application code, and what bits of code go into which of these. (Pragmatic Programmer's "do not repeat yourself")

      Basically your thinking has to shift from the short term to the long term: "I have to maintain this, possibly for many years to come, lets save my future self a lot of pain by doing some planning and doing things right the first time" (yet more pragmatic programmer).

      Anything you get on this post though, is going to be a bit of a "learn C++ in 21 days" thing. We can tell you all about what we've learned and you can try to assimilate it all, but at the end of the day to get 10 years experience you usually need.... 10 years, but not the kind of 1 year x 10 experience lots of folks have. I found it very hard at first to "catch up" with mountains of information being shoved down my throat all at once, but...

      Find a good environment above all else. Work with and for people who are highly experienced, highly critical, and aren't afraid to show it. Work with people who will gladly review all your code and blast it to bits for you. This is emotionally uncomfortable but pushes you up a steep learning curve very quickly. Programming can be a very social and cooperative learning activity in the right environment (look up agile while we're here). I'd say that way you can gain 2 years experience for every 1 on the job, possibly more. The trick is to tell the guys you shouldn't be listening to from the ones you should, and it may take a job-hop or two to find them.

      --
      > no, yes, maybe (tagging beta)
    4. Re:Reading List by neyla · · Score: 1

      Thanks. I was wondering if I'm the only one who found Code Complete -terribly- dull and boring.

      In contrast, I loved the Pragmatic Programmer, Programming Pearls and the Mythical Man Month.

    5. Re:Reading List by Anonymous Coward · · Score: 1

      Interesting looking book, I'll get admin to buy me a copy :D

      Sadly, this is how TDD dies at our company:

      Us: This is how much time (money) it costs to do it properly:

      Them: What!? The customer will never pay that much. Can you do it in two weeks?

      Us: We could hack it together in two weeks, but it will be crap, won't work and we'll have a full time development job for the next 2-3 years maintaining it.

      Them: OK, that's good because we've already told the customer it will be done in two weeks. And by done, we mean they will expect it live on site the Friday after next.

      Us: OK sure, hang on though, we're just popping out for a minute (followed by muffled gunshot)

    6. Re:Reading List by Anonymous Coward · · Score: 0
    7. Re:Reading List by fgb · · Score: 1

      I couldn't agree more. But I would add one caveat: Beware of developers who really know the debugger. They usually seem to be the ones introducing most of the bugs into the code.

    8. Re:Reading List by snowgirl · · Score: 4, Interesting

      Debuggers work fine if you can run your code repeatedly. However, if you have a massive existing workflow that you're also supporting the tools for, then you want as extensive logging as is possible. This is also "debug by print". The big difference though, is that I can let it run all the time, and when something goes wrong, I can then pull up the log, and figure out what went wrong without having to start up a debugger, or redo the process at all... which is very important for intermittent bugs.

      All that said, while I tend to eschew debuggers, and use "debug by print", both do not accurately describe the way I debug. I white-box debug code. That is I read the code and understand how it works. Sometimes, I need to know which path was taken or not, and I add debug printing lines. Why do I do things like that? Because I tend to work with virtualization and emulation, where in for example, I had a bug with an emulator that only manifest its behavior a second after the bad opcode was executed. With a ~4 MHz processor being emulated, that means that about 1 million opcodes had executed (~4 cycles per opcode) prior to the the behavior manifesting itself. The behavior also only demonstrated itself at least about 4 million opcodes in. It's a needle in a haystack to find the correct point at which to break the debugger, and intractable to step through the debugger.

      Using a debugger is simply not always the best choice. It is commonly the best choice, but it certainly is not an omni-tool.

      --
      WARNING! This girl exceeds the MAXIMUM SAFE standards established by the FDA for BRATTINESS
    9. Re:Reading List by Anonymous Coward · · Score: 0

      I would also recommend The Mythical Man-Month by Brooks for something on project management. I know it's a little out of date, and some sections of the book don't apply at all anymore, but it's still one of the best.

    10. Re:Reading List by Anonymous Coward · · Score: 0

      If you work in object oriented languages, I definitively recommend Martin Fowler's "Refactoring" and Robert Martin "Clean code".

    11. Re:Reading List by Chatsubo · · Score: 1

      This is a false dichotomy. Do the TCs anyway, it'll probably be on time (if not early) and won't be crap. Unless you are some kind of deity that creates absolutely no bugs during your 2 week scramble that slow you down regardless. Imho a bug highlighted by a tc is orders of magnitude quicker to find and fix, you'll probably discover it while writing the tc and no one will ever even realise it was there in the first place. Doubters: Try it, even if just at home, let it sink in how much time you are actually saving.

      --
      > no, yes, maybe (tagging beta)
    12. Re:Reading List by geekoid · · Score: 1

      ". It's a needle in a haystack to find the correct point at which to break the debugger.."

      You're not doing it right.

      Should never tale you more then 8 attempts to find the precise place. 12 if you are a Jr. Level

      The fact that so few poeple know the basic bit of applied logic to do that is for me both worrisome and profitable... and seldom understand mathematics.

      --
      The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    13. Re:Reading List by Anonymous Coward · · Score: 0

      This is the book that now I use to evangelize to the new members of my team.
      It's only been out six month, but 'Uncle Bob' has nailed it perfectly.

    14. Re:Reading List by Anonymous Coward · · Score: 0

      First priority IMO, read "Working Effectively with Legacy Code"

      http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052

      Doesn't add much news, but it really makes you understand *why* you want to do things in certain way. Especially pushes unit testing, which to me is the main difference between a software engineer and a happy hacker.

    15. Re:Reading List by stanlyb · · Score: 1

      Actually, debug by print method is sometimes one of the best, and even the only possible method to use, like embedded system where you simply are not able to debug it (or the hardware you need to do it is soooo much expensive...). Oh, and you are some 10 years behind the technology. There are plenty of well done and well documented, and with good analytical tools to analyze the debug log, which in some cases could catch some time and multi-threaded problems which you cannot even imagine of "debuging". Just for example, look at Log4Java/Log4C++/Log4anything to grasp the idea...

    16. Re:Reading List by Anonymous Coward · · Score: 0

      I completely agree with the recommendation for using TDD. I would take it a step further, though: if you are open to it and can find an XP shop, you may get more benefit from one week of work than from years of work at non-XP shops. In particular, I have found pair-programming to be invaluable in my own evolution as a coder, and every day that I pair, be that with junior, mid-level or senior developers, I learn something new. Pair-programming is not for everyone, but I would encourage you to give it a try.
      Most of all, be humble and be open to learning new techniques for self-improvement tomorrow, next year and 20 years from now. Judging from your recent masters (congratulations!) and from the fact that you are reaching out for advice on /. it appears that you already have those 2 points nailed.

    17. Re:Reading List by Anonymous Coward · · Score: 0

      "in one foul swoop."

      Unfortunately, you don't apply your vast talents to understanding english .... It's "fell swoop".

    18. Re:Reading List by Enigma2175 · · Score: 1

      you'll be head and shoulders above most of the industry in one foul swoop.

      <pedantic>Do you mean one fell swoop?</pedantic>

      --

      Enigma

    19. Re:Reading List by Chatsubo · · Score: 1

      Yeah it's been pointed out. <not an excuse> Second language speaker</not an excuse>, Thanks.

      --
      > no, yes, maybe (tagging beta)
    20. Re:Reading List by Enigma2175 · · Score: 1

      Second language speaker

      I do consider that an excuse - I certainly don't know all the idioms for languages I wasn't born with (nor all the idioms for my native language). I knew I was being pedantic, my apologies.

      --

      Enigma

    21. Re:Reading List by marnues · · Score: 1

      I'm on my first TDD and I have to say it doesn't come naturally. I'm feeling quite like the poster and am here for good advice. I already have the Pragmatic Programmer on my amazon wishlist.

      However, unlike the poster I have several years of experience and now that I'm in an environment that supports TDD, it's not as easy as many proclaim. It requires a certain style of problem solving that I have yet to acclimate. I do see the benefits and when my thinking shifts, it should be an extraordinary tool. But please do not give the impression it can be picked up overnight.

    22. Re:Reading List by marnues · · Score: 1

      Such pedantry has personally saved me much embarrassment, and I'm a native speaker of this stupid language. I'd say you did more than just save Chatsubo, there are others on this board thinking about that phrase now.

    23. Re:Reading List by snowgirl · · Score: 1

      ". It's a needle in a haystack to find the correct point at which to break the debugger.."

      You're not doing it right.

      Should never tale you more then 8 attempts to find the precise place. 12 if you are a Jr. Level

      Right, ok, so binary traversal for the Jr. level... but you don't have a long list of instructions like you do with other programs, you have an enormous jump table that you go through. So, put a break point on the code block that executes "xorl eax, eax", and you'll get 8 thousand breakpoint matches a second. Voila, debugger use becomes intractable.

      I already stated that debuggers are good for the general case, but it's not an omni-tool... specifically it is a poor way to handle emulators and virtualizers.

      The fact that so few poeple know the basic bit of applied logic to do that is for me both worrisome and profitable... and seldom understand mathematics.

      What's more worrisome to me, is that some people fail to understand extraordinary circumstances, and attempt to apply generic tools to problems that need special tools.

      --
      WARNING! This girl exceeds the MAXIMUM SAFE standards established by the FDA for BRATTINESS
    24. Re:Reading List by warrior · · Score: 2

      I would also add "The Art of UNIX Programming" to that list. This book isn't just about programming in UNIX. It is more about the philosophy behind UNIX, which in turn describes properties of any sustainable software system.

      It can be found online here: http://www.faqs.org/docs/artu/

      One of my favorite parts is on transparency and discoverability: http://www.faqs.org/docs/artu/ch06s02.html

      --
      Intel transfer the difficult from Hadware to software, for get more power, programmer need more technology. -- chinaitn
    25. Re:Reading List by Anonymous Coward · · Score: 0

      Pragmatic Programmer is all you need

    26. Re:Reading List by cowdung · · Score: 1

      Some other good books (classics)

      - Writing Solid Code by Steve Maguire
      - Debugging the Software Development Process by Steve Maguire
      - How we test at Microsoft (no flames please), its one of the best/most practical books on testing I've seen

    27. Re:Reading List by leonardluen · · Score: 1

      i agree with you. i have worked with languages for years that either had very poor debuggers or using the debugger just wasn't practical for one reason or another.

      printing variables out or logging them to a file isn't much different than setting a watch on them in a debugger anyway. if all i need to see is the value of a variable what does a debugger even gain me?

      people have gotten lazy they don't know how to debug without a debugger... "if all you have is a hammer then everything looks like a nail"

    28. Re:Reading List by CynicTheHedgehog · · Score: 1

      I agree, and would add to this that when tracking down issues with multi-threaded apps (deadlock, race conditions, etc.) the debugging instrumentation itself may mask the problem. Instrumented code executes more slowly, which may completely avoid the issue, and often you have to freeze other threads so that you can follow the path of a single thread. Most of the time it's simpler to throw a thread ID and state information in a debug log and run the code several times to repeat the behavior, and then walk through the logs to figure out what is happening.

    29. Re:Reading List by coxymla · · Score: 1

      I would also add "The UNIX Hater's Handbook" to that list. This book isn't just about programming in UNIX. It is more about the philosophy behind UNIX, which in turn, through negation, describes properties of any sustainable software system.

      It can be found online here: http://m.simson.net/ugh.pdf

      One of my favorite parts is on transparency and discoverability: Chapter 8; csh, pipes, and find; Power Tools for Power Fools

    30. Re:Reading List by jedwidz · · Score: 1

      I sort of agree, the OP can likely skim and toss that one.

      But once they're 'out in the real world', they'll likely be working with people that really should read it. Then it'd be handy for beating people over the head with.

      (Metaphorically that is, the first few times...)

    31. Re:Reading List by coolmadsi · · Score: 1

      printing variables out or logging them to a file isn't much different than setting a watch on them in a debugger anyway. if all i need to see is the value of a variable what does a debugger even gain me?

      people have gotten lazy they don't know how to debug without a debugger... "if all you have is a hammer then everything looks like a nail"

      One thing I've found handy with a debugger is when you can change the values (not just looking at them) mid execution, to see how the code handles the different value (same with code replacement and executing the changed code without having to recompile and run again). It's also nice to see what the state of all variables are at each line - if printing I would have to print them all out multiple times, including where in the program I am.

      I did used to do the printing/saving values when I was first starting, then learnt how to use a debugger properly as it is a lot quicker, so I think the time saved is enough to be valuable. I still occasionally print values out, but very rarely nowadays.

      I also think it is helpful to see what the code is doing when executed; sure I could walk through it in my head and figure it out, but stepping through code does it for me. Thats just a personal preference though I guess.

  3. User acceptance testing by Relayman · · Score: 1

    Other than possibly a more thorough job of testing, the only thing I would add is user acceptance testing. Does the program do what the user thinks it should?

    --
    If I used a sig over again, would anyone notice?
  4. Don't worry by jawtheshark · · Score: 3, Interesting

    Don't worry. You don't seriously think you'll get to do any "software engineering" when you start, do you. You'll start -like everyone- programming fontends/GUIs, and let the more interesting parts to the more senior people.

    --
    Ahhh...the great dumpster continuum. Many a free computer will be found there. -- sowth (748135)
    1. Re:Don't worry by glebovitz · · Score: 1, Funny

      Sorry, but we reserve the GUI design jobs for Monkeys and typewriters.

    2. Re:Don't worry by ozmanjusri · · Score: 3, Funny

      Huh? What do the MCSEs do then?

      --
      "I've got more toys than Teruhisa Kitahara."
    3. Re:Don't worry by Anonymous Coward · · Score: 0

      Who do you thing get's the monkey's their bananas?

    4. Re:Don't worry by Fujisawa+Sensei · · Score: 5, Insightful

      Why is it people seem to think GUIs should be done by junior developers?

      The front end code has to be the biggest pain in the ass out there.

      Ooops I think I just gave away the secret.

      --
      If someone is passing you on the right, you are an asshole for driving in the wrong lane.
    5. Re:Don't worry by DavidRawling · · Score: 2

      It helps to understand what MCSE stands for: Move Computer Shit Everywhere.

      We need a new one for MCITP since MCSE is pretty much dead - Must Consult Independent Thinking Person? Nah someone will do better than that.

      And yes, I have those certs (and others), so I'm ... qualified to poke fun at them.

    6. Re:Don't worry by jawtheshark · · Score: 2

      I don't think that... Problem is, there are very few developers capable of doing good front ends and it is indeed a pain in the ass, especially when you're no good at it. So, senior developers (who did their share on front-end code when they were junior) are all too happy to get rid of that part for themselves. A secondary problem is that those developers who can do good front ends often don't want to do it either as it's not really all that interesting. When they become more senior, they drop it like a hot potato too.

      On top of that, putting pure designers on front-ends (I've been in projects like that) is ripe for disaster too.

      --
      Ahhh...the great dumpster continuum. Many a free computer will be found there. -- sowth (748135)
    7. Re:Don't worry by stjobe · · Score: 5, Funny

      MCSE: Minsweeper Consultant and Solitaire Expert
      At least that's what I was always told.

      --
      "Total destruction the only solution" - Bob Marley
    8. Re:Don't worry by sgtrock · · Score: 1

      Well, the mindset for developing a solid back end that never fails no matter what has to be different from that required to develop a solid, easy to navigate UI (or UIs in the case where multiple front ends will be hitting the same back end application). There are very different criteria for success, after all.

      So no, I don't think UI work should be delegated to just junior developers. It's a specialty that really should be led by at least one senior developer that has a passion for getting it right along with a talented designer or two. As others have mentioned, letting the designers run the whole show is just as bad (if not worse!) to leaving it in the hands of inexperienced people who are bound to flounder on their own.

    9. Re:Don't worry by Lennie · · Score: 1

      Well, the design of the UI should be handled not by a programmer but someone who actually understands users and UI design.

      --
      New things are always on the horizon
    10. Re:Don't worry by marnues · · Score: 1

      Hopefully a well seasoned senior engineer has that talent, but too many choose not to use it (or develop it). I actually just lost the opportunity to develop a full fledged JSF2.0 application and am sad that the creative department decided to include the tool in their application suite. Back to building service calls.

  5. Be a hacker by cryfreedomlove · · Score: 5, Insightful

    I'm not sure you should try to get out of the 'hacker' mindset. Iterative innovation and continuous integration is much more rewarding than any waterfall approach. Good luck and follow your heart.

    1. Re:Be a hacker by rachit · · Score: 1

      Not only that, but the pure fact that he realizes that what he's been doing isn't exactly the same as what you'd do in a regular job means that after few months at a "real job", he would be well on his way on being an "engineer".

    2. Re:Be a hacker by 32771 · · Score: 1

      When he enters the real world he may figure out that a lot of code he will touch isn't exactly created through "software engineering" either.

      He is exactly the type who is in for a nasty surprise, unless he can enter a field where peoples lives depend on his software, like aviation, defense, and maybe medicine.

      --
      Je me souviens.
    3. Re:Be a hacker by Anonymous Coward · · Score: 0

      lolwut? That's the worst possible place for a hacker to be. He needs to find jobs that require reverse-engineering and where they don't have debuggers, he'll be in his element, and be able to charge more than people who can't reverse-engineer, and who'd die without a debugger. Going into a field where lives depend on software means completely abandoning the hacker mentality and developing a love for paperwork and very, very dull programming tasks.

    4. Re:Be a hacker by scharkalvin · · Score: 1

      The "waterfall" approach to design is being replaced by a more iterative one in many cases. The idea is to build a project in stages rather than trying to bring it up all at once. Get SOMETHING working right away is more rewarding than trying to debug EVERYTHING at once.

    5. Re:Be a hacker by marnues · · Score: 1

      He's not in for anything of the sort. He recognizes he's a coder, not a software engineer. It shouldn't take him long to find real software engineers and learn from them, which any job worth having has at least 1 such person who is expected to help out the newbies. It's a fact of business these days that even seasoned professionals require time to ramp up on specific tech and structure. And if he's coming in with a Masters in Computer Science, I'd assume he's supposed to be more of a hacker than a software engineer, giving him ample time to develop those skills.

    6. Re:Be a hacker by marnues · · Score: 1

      Hackers only use the waterfall method. They happen to be the only worker, so it looks iterative. Real iterative innovation requires multiple eyes and close work with another developer/QA.

    7. Re:Be a hacker by Anonymous Coward · · Score: 0

      Wait, what? What's waterfall got to do with engineering? Waterfall has been discredited for decades now, and engineering goes on.

  6. Huh? by Gorobei · · Score: 5, Insightful

    If you can actually design a solution, throw together a suite of unit tests (that ideally show the basic API,) and deploy it to production, you are already ahead of 95% of the "software engineers."

    1. Re:Huh? by Anonymous Coward · · Score: 0

      This ^^^ If you're really concerned about testing just slam your software through as many static code analysis tools as you can get and go through it. Of course depending on what you get you're going to end up with a lot of stupid warnings and such, but you can still catch a ton of bugs fairly efficiently this way.

    2. Re:Huh? by adolf · · Score: 2

      This.

      The guy is describing a process that actually produces things that work.

      He should just stick with that, adjusting as he goes and keeping an open mind. If a more complex process is needed to get a reliable and working result, it will avail itself.

    3. Re:Huh? by starfishsystems · · Score: 3, Insightful

      Adding to this, I'd observe that most of the time, especially when starting out, you'll find that you have to work within the prevailing procedures and resources and organizational culture that define your workplace. If they do waterfall, guess what? You do waterfall.

      It's great to end up somewhere that wants you to lead the way forward, but even then you have to develop the social skill of bringing people along with you by earning their respect and trust. Most people want to see you "do it their way" first in order to prove yourself.

      --
      Parity: What to do when the weekend comes.
    4. Re:Huh? by RoutingGeek · · Score: 1

      +1, don't get caught up in "engineer" as the title. From what you describe, you're already light years ahead. I work in an IT shop (100+ in IT alone) of a decent company and a lot of the "software engineers" we have are unable to fully grasp from start to end -- they just get caught up in their piece of it.

    5. Re:Huh? by ElitistWhiner · · Score: 1

      Mod +1

      Get over the academics stigma ' I'm not worthy' it will only cost you a measly salary you've accepted

  7. What do you think "engineering" is? by mcrbids · · Score: 4, Insightful

    An "engineer" is somebody who takes the time to understand a problem, and creates something to solve that.

    Having done software from scales ranging from "quick shopping cart application" to enterprise scale organizational relationship management software, the only real difference between the two is that with the latter, you create a large number of smaller projects roughly the size of the aforementioned shopping cart application, except that the "users" are often other pieces of the same system. In larger systems, you'll be talking with other developers who have built or manage the pieces your parts will communicate with. You'll read more documentation, and it will be generally of higher quality than the shopping cart scripts.

    Don't *ever* lose the "hacker" mentality - exactly what you described is what software engineering is. The toughest part IMHO is getting to an understanding of what the end user actually needs. That's far and away harder than all the other stuff, which boils down to implementation details once you understand the algorithms.

    --
    I have no problem with your religion until you decide it's reason to deprive others of the truth.
    1. Re:What do you think "engineering" is? by Anonymous Coward · · Score: 4, Informative

      I would add that the big difference between "hacking" and an engineering approach is a structured understanding of the problem. (As several people pointed out, you actually need an engineering degree and possibly a certification to be called an engineer.) Part of that involves using standard and well understood processes for problem solving, inventing and documenting new repeatable processes, measuring performance, and using that to inform the continued development of your processes.

    2. Re:What do you think "engineering" is? by wvmarle · · Score: 4, Funny

      I would add that the big difference between "hacking" and an engineering approach is a structured understanding of the problem.

      I may assume that the CS masters study has taken care of that "structured understanding" part. In other words: hacker + CS degree = software engineer.

    3. Re:What do you think "engineering" is? by Anonymous Coward · · Score: 1

      Not necessarily. That may give you the analytical tools to quantify the problem. That's the science part of computer science, where you learn to synthesize a hypothesis and test that hypothesis. Here's a concrete example. I'm going to build an object storage system because I have a better way to conduct distributed pattern matching. The science part of it involves conducting the experiment and aggregating the result. My method is 1.5 times faster than the best method previously available for a variety of data sets, blah, blah blah.

      The engineering part of it is I'm going to turn my storage system into a SaaS offering. As part of that I'm going to use a defined process for developing the software, during which I will collect metrics to evaluate whether or not the process is good or can be improved. I'm going to define part of the process using XYX methodology as a basis, out of which I will tailor out some processes which will not add value to the final product. I know it is safe to tailor out these processes because there are quantitative evaluations of the process which indicate that there is substantially no difference in total defects, maintenance cost, or schedule impacts ....

    4. Re:What do you think "engineering" is? by sigmabody · · Score: 3, Insightful

      I'd upvote this more if I could. As someone who both codes for a living and hires engineers to do the same, what you are describing is exactly what I look for in an engineer. You can become familiar with more tools and methods, but at the end of the day, you [just] need to be able to solve problems well. The only additional challenge in the "real world" is breaking down larger problems, and solving them in "better" ways (ie: fits better with the rest of the system, is maintainable, is flexible, etc.).

    5. Re:What do you think "engineering" is? by Nursie · · Score: 1

      Let me know when the IEEE has come up with a certification for software engineers, and I'll take it.

      Until such time I'm going to continue to call myself a Software Engineer, because it's the title that one of the world's largest computer and tech firms gives me, and it's the role I perform.

    6. Re:What do you think "engineering" is? by Anonymous Coward · · Score: 1

      engineering degree and possibly a certification to be called an engineer ...er, software engineering only makes pretenses about being Engineering. It's a good goal, but... no, it's not Engineering.

      Engineer (as opposed to software engineer) == Professional Engineer, which generally requires a period of apprenticeship (where a current Professional Engineer reviews your work and signs off on it), taking an exam or few, and other requirements. May or may not actually require a related engineering degree (civil, mechanical, etc). Does not apply to software engineering. But, if you want to sit for the PE exam, go for it. Doesn't have anything to do with writing code or designing software systems.

      Taking software engineering courses in college may get you familiar with working in groups, designing at different levels, and integrating things, but...it's not Engineering. Engineers can pull out books of formulae and analyses for given situations and materials. Software engineering is still an art.

      Only in a few meat space areas is the application problem understandable the way real engineering breaks things down, like finance and accounting.

    7. Re:What do you think "engineering" is? by Anonymous Coward · · Score: 0

      I would add that the big difference between "hacking" and an engineering approach is a structured understanding of the problem.

      I disagree. Hacking is part of Engineering. CS is where you come up with grand dreams of the perfect Utopia. Engineering is where you watch those dreams get shattered under the weight of Reality. With CS, there is a "right" and a "wrong" way to do things. With Engineering, there are "better" and "worse" ways to get something done, but at the end of the day if it works, it's "right". And the way you get to "it's working" very often comes down to "hacking".

      This isn't unique to CS, either. This is how it works for all professions.

    8. Re:What do you think "engineering" is? by Anonymous Coward · · Score: 1

      An "engineer" is someone who has survived a 4-year engineering degree program, then successfully completed the professional engineering exams. Anyone else who uses the title "engineer" is faking it, and in most countries outside the US it is illegal to do so. Plus it really pisses off us real engineers.

    9. Re:What do you think "engineering" is? by TheSpoom · · Score: 1

      Plus it really pisses off us real engineers.

      Yeah, and that's why we keep doing it. You guys are fun when you're mad! (Unlike the rest of the time.)

      --
      It's better to vote for what you want and not get it than to vote for what you don't want and get it.
      - E. Debs
    10. Re:What do you think "engineering" is? by srobert · · Score: 1

      I used to do maintenance work in hotels as a member of the International Union of Operating Engineers. We called ourselves engineers. I would like for you to meet the members down at the union hall and explain to them why they are not engineers. That should be an interesting discussion to watch. They may have some knowledge of the history of that word that you weren't taught in college.
      P.S. I'm not employed in that line of work anymore. I'm now a P.E.

    11. Re:What do you think "engineering" is? by claar · · Score: 2

      I've never been so glad to see something scored +5 Funny. Gives me hope in Slashdot again.

      --
      I'd give my right arm to be ambidextrous...
    12. Re:What do you think "engineering" is? by Anonymous Coward · · Score: 0

      The difference between hacking and "software engineer" is how many hoops you have to hop through -- do you have a requirement to fill out the proposal for a project to get an approved "permission to plan" before you can figure out if the project is doable? If no, then you are a hacker, if yes you are a drone^H^H^H^H^H^H professional developer.

    13. Re:What do you think "engineering" is? by HornWumpus · · Score: 1

      They already know they are no more engineers then sanitation engineers.

      That's exactly why they respond violently when called on it (that and it's the union way).

      Just because Engineer has been an overloaded word for centuries doesn't change it's true meaning.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    14. Re:What do you think "engineering" is? by srobert · · Score: 1

      So much is revealed in your short response.
      1. You have unwarranted prejudices against unions and their members.
      2. You have no respect for sanitation workers.
      3. You have no respect for tradesmen, such as operating engineers, or stationary engineers, whose working knowledge often exceeds that of licensed PE's. (I know what I'm talking about here. I've been both.)
      3. You seem unaware that licensed professional engineers work in a field called "sanitation engineering".
      5. You don't know the difference between "then" and "than".

    15. Re:What do you think "engineering" is? by srobert · · Score: 1

      But don't beat yourself up. Apparently, I don't know the difference between 3 and 4.

    16. Re:What do you think "engineering" is? by Aighearach · · Score: 1

      Wait, you thought your Engineer badge was a Purple Heart?

      lol

    17. Re:What do you think "engineering" is? by marnues · · Score: 1

      This anon doesn't understand software or engineering. Software is a control system within a control system. The difference between civil and software engineering is that bridges have been built for thousands of years. Engineering methodology can easily be applied to software, and I'm not talking waterfall. High level designs should follow a similar method that traditional engineering does. However, too many programmers don't know how or why such methods should be applied, and too many programmers are titled software engineer. So we are left with poor engineering giving programmers a bad taste in their mouth for engineering. Then we get cowboy coders proclaiming their methodology an agile one because they consider the engineering aspect of agile programming unnecessary.

    18. Re:What do you think "engineering" is? by wvmarle · · Score: 1

      Especially after seeing all those very serious replies on my comment, right?

  8. Hacker vs engineer by CruelKnave · · Score: 4, Insightful

    I never considered the two to be mutually exclusive.

    1. Re:Hacker vs engineer by Anonymous Coward · · Score: 0

      Well, a bloke in a shed is not an engineer, while a technical expert which is able to design and implement a technical solution meeting every requirement and existing standards with safety and economy in mind is not a hacker.

      And if you believe that the latter isn't engineering then your concept of what engineering is supposed to be is completely out of whack.

      And by the way, I am a structural engineer with a PE and all. So, I know what engineering is supposed to really be. After all, if I didn't then I could end up in jail.

  9. development styles by sneakyimp · · Score: 1, Funny

    Learn to bullshit about development methods like agile, waterfall, etc. Learn to estimate project costs before a project starts. Expect to spend lots of time making these estimates without getting paid for them only to be told that your estimate is too expensive and you've been beat out by some 'hacker' from Asia or Eastern Europe where the cost of living is a fraction of yours.

    If you play your cards right, you will graduate from programmer of the line to 'system architect' or something like that where you tell other programmers what to do.

    1. Re:development styles by rastos1 · · Score: 4, Insightful

      or Eastern Europe where the cost of living is a fraction of yours.

      You know, things have changed in East Europe during last decades. Electricity 0.14 EUR/kWh here vs. 0.15$/kWh in USA. Gas 1.4 EUR/l vs 1$/l in USA (caused mostly by taxes but that doesn't matter). Chicken meat 2 EUR/kg vs 2$/kg in USA. House property 1300EUR/m2 in Slovakia vs 200$/m2 in USA.

      Perhaps I've picked wrong sources or wrong goods. I challenge you to provide your numbers and I'll tell you the prices here (where the average income is less than 800EUR/month). I'm damn sure, that cost of living here is NOT a fraction of cost of living in US.

    2. Re:development styles by sneakyimp · · Score: 1

      I didn't mean for my post to be dismissive or disparaging of either Asia or Eastern Europe. The folks I've worked with from Russia, Ukraine, and India have been pretty skilled (with some exceptions). The rates of programmers from these regions are typically half (or less) of programmers in my region.

      The biggest difference I can see between your cost-of-living values and mine is property. I live in Los Angeles. The house next door (about 95 square meters) was listed a few years ago for $1m USD -- that's about $10,000/m2 -- but prices have dropped a lot in the past 4 years. A variety of homes listed online in my area range from $2750/m2 to $7500/m2 depending on the neighborhood. Perhaps I should have included rural parts of the US in the regions I complained about. Software Developer wages in Arkansas are half what they are in California. Property values are much lower too.

      Your other numbers seem pretty accurate. Chicken $3-4/kg, Electricity $0.145/kWh, Gas $1.1/l

    3. Re:development styles by Anonymous Coward · · Score: 0

      You do free estimates? Forget that. I bill hourly to do estimate and design. I'm very clear about that: usually about billable hours for a one-pager with t-shirt size estimate. They like what they hear and it's design time. Also billable hours. For smallish projects about 2 or 3 days. Deliverable is a high level design doc that spec major components, interfaces and a rough-up of tasks. Call it 8 or 10 pages, complete with time estimate. They give the go-ahead, and I spend a day or so actually tasking it out and building a scrum board. Still haven't written any code beyond proof-of-concept type stuff. Estimates take time, and that time ain't free.

    4. Re:development styles by rastos1 · · Score: 1

      Yes, the property prices looked suspicious to me, that's why I included the links. Also I would be hard pressed to find a city of size of LA here. However the point is proven. East Europe became comparably expensive to developed countries. With East Europe I mean Slovakia, Czech, Hungary, Poland and Bulgaria. Don't know about Ukraine, Belarus or Romania for example.

    5. Re:development styles by Kjella · · Score: 1

      vs 200$/m2 in USA.

      Uh, you're aware that the page you link to in the graph for the US says: Purchase-only House Price Index, Seasonally Adjusted (Q1 1991=100). It's an index, not dollars. For example this listed in dollars says $2000/m^2 in city center, $1300/m^2 outside. And that will vary greatly inside the US, they're almost as big as Europe so low/highs there are pretty much like low/highs in Europe - much bigger spread.

      --
      Live today, because you never know what tomorrow brings
    6. Re:development styles by Ash+Vince · · Score: 1

      Learn to bullshit about development methods like agile, waterfall, etc.

      Check. This is most important when explaining to new developers fresh out of uni why you want them to actually talk to the client top find out what the client needs and are not giving them a defined specification where some else has already done the hard work

      Learn to estimate project costs before a project starts.

      When I was promoted to a technical lead I asked the guy who did the job previously how the hell you did this part of the role as it was always the bit I found most tricky. He basically told me to just give it my best guess then double it to be sure you covered the work. If the client moans it is too long then you offer them a 20% discount and are still covered.

      Expect to spend lots of time making these estimates without getting paid for them only to be told that your estimate is too expensive and you've been beat out by some 'hacker' from Asia or Eastern Europe where the cost of living is a fraction of yours.

      Of course, the problem here is that while these developers are much cheaper they need much better specifications to work from. They are generally not as good at talking to the client directly and finding out the business needs. Also, the joy of agile is that if is a methodology designed to cope with feature creep. Your fella in Estonia or India will be more likely to insist on a contract renegotiation at this point.

      Also, you need to be sure your foreign developer is going to produce a decent working system. I am current working with a very good eastern European developer who produces damn decent code. I have had to rescue projects in the past though that were thrown together by halfwits just trying to get a quick buck and then move on to the next sucker safe in the knowledge that there was very little legal recourse the client had if the project went sideways.

      If you play your cards right, you will graduate from programmer of the line to 'system architect' or something like that where you tell other programmers what to do.

      Telling other programmers what to do is nightmare, almost all of us are arrogant fuckers and trying to dictate how we solve a problem is usually an exercise in futility. Just let the guys who work for you make their own fuckups and learn from them, never try and steer them clear of the fuckups ahead of time as they just resent this. Nope, you have to let them code themselves into a blind alley you saw coming a mile off then just demand they fix it. Or, you can try and hire that one exceptional developer in a million who actually listens and is happy to take advice, but they are often too expensive unless you get them straight out of uni.

      --
      I dont read /. to RTFA, I read /. to offend people in ignorance.
    7. Re:development styles by geoskd · · Score: 1

      You know, things have changed in East Europe during last decades. Electricity 0.14 EUR/kWh here vs. 0.15$/kWh in USA. Gas 1.4 EUR/l vs 1$/l in USA (caused mostly by taxes but that doesn't matter). Chicken meat 2 EUR/kg vs 2$/kg in USA. House property 1300EUR/m2 in Slovakia [globalpropertyguide.com] vs 200$/m2 in USA [globalpropertyguide.com].

      Wow, I'm not sure where globalpropertyguide is getting their numbers, but 37,000 USD for a 2000 square foot home is pure ghetto. I lived in a slum for a while in a more or less typical American city, and 1400 square feet (127 m2) cost me $60,000 ($470 / m2). My current place is about typical for a middle class professional in the US, and ran me 1600 USD / m2. In the tech areas of the US (Silicon Valley, the Tech northeast), I know people who have paid as much as 4000 USD / m2 just to get a place within an hour commute of their job.

      I cant speak to the validity of the Slovakian estimates, but your US numbers are pure rubbish.

      -=Geoskd

      --
      I wish I had a good sig, but all the good ones are copyrighted
    8. Re:development styles by wmelnick · · Score: 1

      Chicken is $2/lb not $2/kg. Also your housing is off by a factor of AT LEAST 10 for the US - at least in an area where you would want to live.

    9. Re:development styles by Anonymous Coward · · Score: 0

      I just checked on [globalpropertyguide.com] and the US prices to BUY are much higher.. from $11,000/m2 in NY area to margins in Florida.. The average price in North America is Price (sq.m): $13,428. http://www.globalpropertyguide.com/North-America/United-States

    10. Re:development styles by Anonymous Coward · · Score: 0

      Your post is about psychology not economics. What's the exchange rate? $1.32 per EUR.

      That's a 30% Cost of Living increase by your numbers.

    11. Re:development styles by Aighearach · · Score: 1

      I'm in the US (Oregon) and I pay $0.065/kWh, chicken $4/kg (whole), real estate $1000/m2 ($100/ft2)

    12. Re:development styles by rastos1 · · Score: 1

      I have no problem to admit that you are right about US prices. Googling a representative data is quite difficult because of big variation between locations and quality of the property. However the point is that when you say "the prices in East Europe are a fraction of US prices" then we are not talking about fractions like 1/100 nor 1/10. If I take the prices property from a sibling post at level 2000$/m2 (which is at about 1500EUR/m2) then we talk abut ratio of 4/5. That is technically a fraction but it shifts the meaning a little bit.

    13. Re:development styles by treeves · · Score: 1

      I don't know what that House Price Index represents for US house prices on the website you linked to is, but I'm pretty sure it's not $/m2.
      House prices when I last bought a house two years ago were around $100/sq. ft., which is over $1000/m2. I live in a part of the US that has higher housing cost than average, but nowhere near five times average, not even 2x average.

      --
      ...the future crusty old bastards are already drinking the Kool-Aid.
    14. Re:development styles by hotdog.sk · · Score: 1

      You've picked the wrong region – Slovakia is Central European country. But you're completely right on living costs.

    15. Re:development styles by rastos1 · · Score: 1

      These definitions vary.

  10. Good Start by orlanz · · Score: 4, Informative

    But really, that's for project management.

    1) Go read up on the industry standard IDEs & debuggers for the programming environment you will be working in.
    2) If your job is really consistent and stable (ie: Java programs day in day out), then go master your IDEs & debuggers. Learn their customization capabilities.
    3) Learn to organize your personal code library and build up your core tool set in a way that is functionally reusable and searchable.
    4) Learn to program your work in a way that adds to and complements #3.
    5) Learn to document your code and processes.
    6) Read a book on communicating to management (sry someone else will need to provide a good example), this will set you apart from your companions.

    I meant to give you my 2 cents, but dropped a nickle... keep it. Good luck.

    1. Re:Good Start by rwv · · Score: 1

      7) Develop methods to test the products you're developing so that each release can be painlessly tested.
      8) When new faults develop, add new tests that will repeat them before fixing the code... then fix the code.
      9) Consciously sort your testing into two bins... ones to run for every release and ones to run for every major release.
      10) Ensure that 3 or 4 peers have had the opportunity to review the code you've written*.
      11) Go out to lunch with your team. Learn their interests. Learn their spouses names.

      * This is very much an organizational thing that may or may not be hoisted on you. If it isn't hoisted on you, find out if there is a reason why you aren't doing code reviews at your organization. Code reviews find faults that testing misses (and vice versa) but, more importantly, code reviews find code that isn't maintainable and forces you to name your variables better and comment better (i.e. the common issue, "I'm not sure what this function is supposed to be doing").

      Another nickel... this time spelled correctly. And more wishes of luck.

  11. Try to get a real engineer as mentor by Anonymous Coward · · Score: 2, Informative

    Well.. You need to find some real good engineers to work with and learn from them. :)

    There are a lot of good coding examples open-source (Linux kernel) and you can learn from them too.. Practice makes things perfect.. Practice good coding habits.. Think more, code less, debug less. :)

    Good luck..

    ~Self-learned Jack of all trades

    1. Re:Try to get a real engineer as mentor by Anonymous Coward · · Score: 0

      Still doesn't turn you into an engineer, you know, like one with an actual engineering degree.

    2. Re:Try to get a real engineer as mentor by adolf · · Score: 4, Insightful

      Still doesn't turn you into an engineer, you know, like one with an actual engineering degree.

      Meh.

      Which came first, the engineer or the engineering degree?

    3. Re:Try to get a real engineer as mentor by Mia'cova · · Score: 2

      A masters in CS is just as valid towards a "software engineer" job title as a similarly focused degree from an engineering dept. Different schools have different organizational structures. A software engineering degree from a CS dept is no less valuable than one that comes with a ring. You should absolutely not equate a "software engineer" as someone with a ring. That's not to say that ring-based engineers can't be good software engineers. I'm not in any way saying that. I'm just saying that more software engineers come out of math and cs faculties than engineering faculties with an "actual engineering degree".

    4. Re:Try to get a real engineer as mentor by GreatBunzinni · · Score: 1

      Which came first, the engineer or the engineering degree?

      The engineering degree, obviously. The word "engineer" refers to a title which is granted to someone who demonstrates that he possesses the necessary technical skills recognized as minimum requirements for competency in a given technical field, whose application is fundamental to society. Therefore, before that title is granted to someone, the basic set of necessary techincal skills must be defined. Defining that set of skills implies the definition of engineering degrees which are able to meet those requirements. So, as it can easily be seen, the engineer (someone whose skill set has been officially recognized) can only come after the engineering degree (the definition of what that skill set might be).

      And before you ask, it is quite possible that someone attained that skill set before being recognized as an engineer. Yet, having the necessary skills doesn't mean they have been officially recognized. And what defines an engineer, beyond his technical know-how, is if society officially recognizes them.

      And no, having those skills is not enough to be considered an engineer. To put it in perspective, you might have spent half your life learning medicine stuff on your own, and you might even get a better hold of the subject than most medical doctors out there. Yet, unless you are able to get your medical license, which is the way used by society to officially recognize those who have the basic skill set to practice medicine, you are not a doctor.

      --
      Slashdot, fix your code or at least hire someone who is competent at it to do it for you.
    5. Re:Try to get a real engineer as mentor by Anonymous Coward · · Score: 0

      Still doesn't turn you into an engineer, you know, like one with an actual engineering degree.

      Neither does a degree.
      CS is about designing a nice, round hole to hammer a nice, round peg into.
      Software Engineering is about figuring out how you can stick a square peg in a round hole.

      CS comes into play more in long-term project development and large-scale architecture. Engineering comes more into play when dealing with day-to-day operations and on-the-fly solutions.

      The only thing which really makes you a Software Engineer is experience.

    6. Re:Try to get a real engineer as mentor by Anonymous Coward · · Score: 0

      >And what defines an engineer, beyond his technical know-how, is if society officially recognizes them.

      So when my pay stubs say "Software Engineer" on them, next to the money I make, and I can then use that money to pay for important things like beer, "society" is recognizing me as a software engineer in the only "official" way that means anything, i.e. cash.

      I mean, you can have a medical license, but if you aren't employed and you spend your days at an intersection with a cardboard sign and an empty cup, you're not a doctor, you're a bum.

    7. Re:Try to get a real engineer as mentor by tomboalogo · · Score: 1

      Kinda like veterinarians are perfectly good brain surgeons!

    8. Re:Try to get a real engineer as mentor by vgerclover · · Score: 1
      Engineer:

      An engineer is a professional practitioner of engineering, concerned with applying scientific knowledge, mathematics and ingenuity to develop solutions for technical problems. Engineers design materials, structures, machines and systems while considering the limitations imposed by practicality, safety and cost. The word engineer is derived from the Latin roots ingeniare ("to contrive, devise") and ingenium ("cleverness").

      In the US and Canada, engineering is defined as a regulated profession whose practice and practitioners are licensed and governed by law.

      Engineering:

      the creative application of scientific principles to design or develop structures, machines, apparatus, or manufacturing processes, or works utilizing them singly or in combination; or to construct or operate the same with full cognizance of their design; or to forecast their behavior under specific operating conditions; all as respects an intended function, economics of operation and safety to life and property.

      One who practices engineering is called an engineer, and those licensed to do so may have more formal designations such as Professional Engineer, Chartered Engineer, Incorporated Engineer, Ingenieur or European Engineer. The broad discipline of engineering encompasses a range of more specialized sub disciplines, each with a more specific emphasis on certain fields of application and particular areas of technology.

      So to be an engineer, you have to practice engineering. Whether you can call yourself that way only if you are recognized as such by the state, depends on the laws governing both the discipline and the country you are in.

    9. Re:Try to get a real engineer as mentor by quacking+duck · · Score: 1

      "Society" isn't recognizing you as an engineer, your employer is. The governing bodies that accredit engineers probably won't make too much of a fuss over a "software engineer" (they will for large organizations: in parts of Canada Microsoft is forbidden from spelling out what "MCSE" and similar certifications mean) but you can bet they'll be on someone like a ton of bricks if they're working in a civil or mechanical engineering capacity without proper accreditation.

    10. Re:Try to get a real engineer as mentor by GreatBunzinni · · Score: 1

      It can say "supreme wizard", if you'd like. Yet, the print on your pay stub doesn't make you one, does it?

      --
      Slashdot, fix your code or at least hire someone who is competent at it to do it for you.
    11. Re:Try to get a real engineer as mentor by Aighearach · · Score: 1

      You don't need a degree to be an engineer, you just have to be able to build siege engines.

    12. Re:Try to get a real engineer as mentor by Aighearach · · Score: 1

      If you're doing your job it does!

    13. Re:Try to get a real engineer as mentor by Aighearach · · Score: 1

      Regardless of what your source says, I'm in Oregon which is part of the US, and here only structural and civic engineers are governed by law. Even if you're designing CPUs there is no formal recognition at all. You can certainly join some sort of trade organization that requires a degree that says "engineer" on it, if you want to have a little badge that says you're real and spiffy. The real test though in this culture is if you're drawing a paycheck under that title.

  12. you're already there by Anonymous Coward · · Score: 0

    The only thing left is learning whatever ideology your boss at your new job touts as the greatest thing ever. Then doing what you already do, but within his crappy box.

  13. just be a good learner by Anonymous Coward · · Score: 0

    there are so many tools, technologies, dev environments, methodologies, languanges, operating systems... just don't sweat it. Keep your mind open and be curious, never assume you know all there is to know. Learn your debugging tools really well and find mentors for engineering *and* career questions (thank you Greg Berg). When you get to be a crufty old code, give some back and be one of those mentors.

  14. don't sweat it by Anonymous Coward · · Score: 0

    Companies are looking for young programming talent with a generational affinity toward social networking, mobile technology, games, etc, and easy ability to dive into diverse programming languages and toolsets and get things done. Your academic CS background will be valued, too.

    You'll pick up the software engineering and best practices stuff in your few years on the job. They're important, but that's usually not what you're expected to provide as a freshly minted college grad or masters degree holder. Just tell the interviewers you realize that it's very important and you will work hard to learn that stuff on the job. Oh, and you're willing to do whatever it takes - write shell scripts and unit tests, kick off builds every night, etc. They love hearing that from young applicants.

  15. Predictability by Okind · · Score: 5, Insightful

    Being a software engineer instead of a hacker is all about predictability:

    • Predictable planning: have it done when you say it will be.
    • Software quality: use Test Driven Design to ensure your code behaves as it should.
    • Predictable deployments: practice and simplify deploying your code for systems.
    • Document the structure of your code, so the next guy knows what he's looking at.

    There's more to each of these items, of course, but it's all about making it simple (KISS) and predictable. This sets a software engineer apart from a mere hacker.

    1. Re:Predictability by aXis100 · · Score: 1

      This is about the best reponse so far.

      Software still hasn't become formalised enough to be a real Engineering discipline, so I wouldnt get too hung up on the term. As an engineer from a different feild, it still makes me cringe when I see the range of people that will use the title.

      Nevertheless, the difference between a hacker and a professional sofware "engineer" is structured, repeatable, verifiable, deterministic results.

    2. Re:Predictability by olau · · Score: 1

      Software quality: use Test Driven Design to ensure your code behaves as it should.

      I don't think this is necessarily the best advice. It can make a lot of sense in some circumstances, but in others it's just a waste of time. You should try to understand the trade-off. I know there are some papers out there about it.

      The important thing is that you won't know if you code is behaving as it should until the real users are using it. You need to link your sense of accomplishment to the happiness of the customers/users.

      Predictable deployments: practice and simplify deploying your code for systems.

      Any seasoned hacker would do this because any seasoned hacker has quickly found out that the repetitive task of deploying is a nuisance. You write a script to do it. Period.

      Generalizing this idea a bit, as you go about your work, stop from time to time and think about what's the most annoying part of the projects you do and set aside time to see if you can find a way to fix that (setting aside time is the important part). Fixing things like deployment or integration testing or an API that turned out to be cumbersome to work with or finding a way to interact better with a customer who's a PITA can all make a big difference.

      Of course, some problems are unfixable in the sense that they represent a trade-off, the lesser of two evils.

    3. Re:Predictability by St.Creed · · Score: 1

      Software quality: use Test Driven Design to ensure your code behaves as it should.

      I don't think this is necessarily the best advice. It can make a lot of sense in some circumstances, but in others it's just a waste of time. You should try to understand the trade-off. I know there are some papers out there about it.

      The important thing is that you won't know if you code is behaving as it should until the real users are using it. You need to link your sense of accomplishment to the happiness of the customers/users.

      The interesting thing to me is that Test Driven Design is just a way to enforce predicate checking (preconditions, postconditions and invariants). Something anyone with a CS degree should do by instinct anyway, in my opinion. Most of my programs fail *after* the OS fails under stress tests, because I check my predicates in every routine. It adds only a bit of code but writing the checks forces you to think about your conditions and that enables you to spot bugs in an early stage. And you can do this at a finer grain than just per routine.

      That's not to say TDD is worthless: it's a huge improvement over having no preconditions/postconditions/invariants (a lot of programmers do not understand the concepts) but if you have these structurally in your code, it doesn't add that much IMO.

      --
      Therefore, by the (faulty) logic you're using, you're just a cow with a keyboard - osu-neko (2604)
    4. Re:Predictability by jekewa · · Score: 1

      Something anyone with a CS degree should do by instinct anyway, in my opinion.

      I'll cut slack for the "opinion" bit, but having a degree doesn't mean anything becomes instinct.

      --
      End the FUD
    5. Re:Predictability by St.Creed · · Score: 1

      What, you don't have an inbred instict to go North, bark to the moon and use preconditions? How quaint! :)

      Okay - perhaps I should have said "someone with a CS degree should have the use of pre/postconditions/invariants as automated behavior when programming". This was drilled into me when learning programming, along with "using a goto is an automatic FAIL" and assorted programming hygiene. It was sort of the basis before you actually started on programming: first they gave us a load of theory on pre and postconditions, how to prove a program correct, and assorted maths, and only THEN were we allowed to start programming (in the mean time we were also taught Pascal). I've always felt that this was one of the more useful things I've picked up, in the sense that it gives you a very specific way of looking at a program.

      --
      Therefore, by the (faulty) logic you're using, you're just a cow with a keyboard - osu-neko (2604)
    6. Re:Predictability by jekewa · · Score: 1

      Nice recovery.

      There is more often than not a gap between the design and the actual implementation, though, that sets the "hackers" from the "engineers," to use the OP's idea of it.

      I try to practice quality standards and easy to follow patterns or algorithms. KISS is the fall-back; if it's too hard to write the software, then the design isn't appropriate. Likewise, if the software is too hard to read or manage, then you didn't follow the design.

      --
      End the FUD
    7. Re:Predictability by Anonymous Coward · · Score: 0

      If Civil Engineers built bridges the way much software is, they'd fill the gap from the bottom to road level with concrete, test that it doesn't collapse, and move on. Meanwhile, they spent more then was needed.

      I agree, software/IT hasn't become formalized enough. I don't see math formulas predicting the outcome vs the input like I did in my mechanical engineering classes.

      A P.E. stamp means someone will stand behind the design in a court of law. Every piece of software I've seen comes with disclaimers of suitability to the task.

    8. Re:Predictability by Anonymous Coward · · Score: 0

      Hurrah. You may be the only person on slashdot who really knows what "engineer" actually means. (Canadian law is about words, not meanings.) Documentation, Planned and As Built. Even things as simple as bridges are rarely built exactly as planned. And like software, bridges are only simple to people who never built one.

      The yanks went to the moon. It took them a decade and was taxing even for one of the largest economies in the world. And all they built was a tube full of fuel and a tin can with some compressed air, a couple of radios and a parachute. How hard could it be?

  16. Don't sweat it! by Anonymous Coward · · Score: 0

    The difference between a programmer and a software engineer are years of experience doing the work. I haven't yet met someone who graduated from school with a degree in Software Engineering whom I would call a software engineer. Don't sweat it one bit.

    1. Re:Don't sweat it! by thegrassyknowl · · Score: 1

      Problem:
          The application is too slow!

      Hacker:
          This random piece of code looks poor.
          I'll put in some uber-tricky stuff that is highly optimized to make the compiler do what I want and destroy all chances of reading the code.
          Release

      Engineer:
          In what way is the application slow?
          Show me how to reproduce.
          Profile
          Examine
          Optimize hotspots.
          Test
          Release

      --
      I drink to make other people interesting!
  17. You get a job by phantomfive · · Score: 5, Insightful

    For experience, there is no substitute for working 8 hours a day, week after week, trying to write programs and make them better. Always be thinking about how you can improve the program you are working on (even if you don't actually have the time to do it), and you will quickly improve.

    Even if you are just stuck debugging someone else's code (90% of what I've done over the last year), the process of doing that 1,600 hours a year will really improve your skills.

    --
    "First they came for the slanderers and i said nothing."
    1. Re:You get a job by Gorobei · · Score: 1

      Truer words were never spoken.

    2. Re:You get a job by Anonymous Coward · · Score: 0

      One equals one.

      Now, truer words have been spoken.

    3. Re:You get a job by spongman · · Score: 1

      less useful words were never spoken

    4. Re:You get a job by dkf · · Score: 1

      Even if you are just stuck debugging someone else's code (90% of what I've done over the last year), the process of doing that 1,600 hours a year will really improve your skills.

      It particularly helps if you're stuck with maintaining code that was written by you several years ago, because that might as well be another person. The only way to minimize the overall workload is to engineer stuff properly.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    5. Re:You get a job by Anonymous Coward · · Score: 0

      I agree 100%. People spend a lot of time defining themselves as one type or another. It sounds like the poster is lacking confidence but has the background and some experience. There are clear differences between programers and developers but everyone seems to have trouble categorizing themselves. Overconfident programmers often call themselves developers which is probably healthy in the long term.

      Get the job and the experience will come. Worry less about what to 'call' yourself and learn something every day.

    6. Re:You get a job by phantomfive · · Score: 1

      The only way to minimize the overall workload is to engineer stuff properly.

      Oh yes, that is so true, and if you can't manage that, the least you can do is try to debug your stuff before you give up.

      Those two things are the reason I've been debugging other people's code for so long.

      --
      "First they came for the slanderers and i said nothing."
  18. Not sure by ctime · · Score: 1

    Well, other than know your shit and stop whining, I don't know. You haven't said what your title will be or what you will be doing. Maybe by learning operations as much as you can and about how things work today rather than try to design new pie in the sky systems. Everything needs to be gradual. Also, learn how to document for gods sakes. Try to keep things simple, yet effective. Re-use proven concepts. Managing projects is always a trade off a effectiveness and efficiency, many people forget when they design a new system how inefficient it will be for the rest of the company or systems to do their jobs with the new system. Those designers are assholes.

    Also, most of the technical "principles" and "distinguished architects" designing systems are pathologically overconfident in themselves. You'll be implementing their ideas for many years to come anyways.

  19. Stay as a hacker by unity100 · · Score: 2

    for

    Since my academic work has focused almost solely on computer science and not software engineering per se, I'm really still a 'hacker,' meaning I take a problem, sketch together a rough solution using the appropriate CS algorithms, and then code something up (using a lot of prints to debug)

    this is what you will be doing throughout your entire career. time constraints, budget constraints, legal constraints, XYZ constraints - there will always be something effecting you to have to do it the hack way.

    1. Re:Stay as a hacker by Anonymous Coward · · Score: 0

      To take one step further:

      | Obviously, something like that works quite well in the academic environment, but not in the 'real world.'

      This doesn't work "quite well in the academic environment." You've just been unlucky that nobody has set you a task that's complex enough to require you to learn what you should know.

      I teach computational maths at a research university. My students learn to use profilers, debuggers, revision control tools, etc., since these are what's needed when you solve real problems. What you should say is that you can get away without these for toy problems, but not for real-life software development. This has nothing to do with the "academic environment", except as a way to let you feel superior about yourself.

  20. It depends by Anonymous Coward · · Score: 0

    By graduating from 'hacking' something together I'll assume you mean developing some rhyme and reason to your process, which honestly extends from experience and the design rules your employer gives you to code. Most companies have a specific design process, some more rigorous than others, the extent of what and how you are allowed to place things together and what sort of testing is expected should be laid out there.

  21. An engineer always put design above hackery by itsybitsy · · Score: 1

    Building a prototype by the seat of your hacking pants is one thing, working in start ups and corporate IT departments does require you to get serious and drop the hackery and adopt a professional attitude towards software development. Become an engineer committed to the design of the system that works for your client's needs.

    You'll of course, at any company where work has been done, discover that hackers have already been at the company likely creating a mess. One thing that successful software engineers do is clean up the hackery messes by organizing the systems they left behind. When creating new systems that are to last a long time then organize it the best that can be done with a sane and clear design to get the job done and make it easy to maintain and grow.

    It's not that you'll never use hacks along the way but it's best to never put those into production code. It will likely come back and bite you and the client more often than not.

    Testing Suites help a lot. Create them. Use them.

    Oh, get really good at debugging the systems. Listen to other people. Ask them questions. Be humble when you don't know and thank people for assisting you. It pays off and makes you indispensable.

    1. Re:An engineer always put design above hackery by Ash+Vince · · Score: 1

      Oh, get really good at debugging the systems. Listen to other people. Ask them questions. Be humble when you don't know and thank people for assisting you. It pays off and makes you indispensable.

      And the other side of this is never sound sure about something you are not absolutely 100% about. I have a guy who works for me at the moment who always contributes to discussions sounding 100% positive what he is saying is correct. Once I realised he was wrong about some of this stuff I realised I now have no way of knowing what he says is true without second guessing everything he suggests, that is so not where you want to be.

      The funny thing is I was always like this too when I was more junior and I never realised how crap it was until the boot was put on the other foot.

      --
      I dont read /. to RTFA, I read /. to offend people in ignorance.
    2. Re:An engineer always put design above hackery by Aighearach · · Score: 1

      You'll of course, at any company where work has been done, discover that hackers have already been at the company likely creating a mess.

      So that could also be phrased as: You'll find that hackers are already successful in the company, and if you're snooty you'll hate their work.

  22. GOF Design Patterns by binarstu · · Score: 3, Informative

    I'd recommend reading the classic software design book Design Patterns by the "Gang of Four" (Gamma, Helm, Johnson and Vlissides). I know that "design patterns" has become something of an overused buzzword, but that book is without a doubt one of the best books about software architecture I have ever read. It helps you learn how to think about designing object-oriented software in ways that result in re-usable, understandable code. I don't think I really saw the power of good object-oriented design until I read Design Patterns.

    1. Re:GOF Design Patterns by loufoque · · Score: 1, Interesting

      Sure, this way you'll know exactly how you should not program!

    2. Re:GOF Design Patterns by thoth · · Score: 1

      That's a good book, but one that I was only able to fully appreciate after reading Head First Design Patterns (yes, a somewhat-gimmicky-in-presentation Head First book, but honestly, it worked great for me. The presentation was entertaining and informative, and the examples are great). So I also recommend HFDP if Design Patterns is initially unapproachable.

  23. Difference is level of detail and corner cases by Sipper · · Score: 4, Insightful

    I think the main difference between "hacker" and "engineer" is the level of detail and concerns on corner cases that you want your code to be able to handle and/or tolerate. Having worked as an engineer for some years, basically I boil down the job to three things -- 1) good clear communication of what the problem to solve actually is, 2) solving the problem such that the solution "meets spec", 3) trying to make sure that the solution continues to work within tolerance in any typical adverse conditions the solution needs to handle. Occasionally you may need to do some kind of formal verification that the solution will be wtihin tolerance in typical adverse conditions. With programming this verification might involve a test suite, code review, fuzzy input testing, memory leak testing, security audit, etc.

    But in your particular situation it sounds like you're going to learn what you need on your own on the job one way or the other, so for now I'd say just relax and figure out what you need when you get there. i.e. I think you might be over-thinking this right now. ;-)

    1. Re:Difference is level of detail and corner cases by SenseiLeNoir · · Score: 1

      This is my difference between a programmer, engineer and a hacker. When faced with a round hole and square peg, the programmer saus it does not fit. The engineer will modify one or both to perfectly fit each other. The hacker uses a hammer.

      --
      Have a nice day!
    2. Re:Difference is level of detail and corner cases by jawtheshark · · Score: 1

      Nothing wrong with a hammer if Sales sold the feature and it had to be rolled out yesterday....

      --
      Ahhh...the great dumpster continuum. Many a free computer will be found there. -- sowth (748135)
    3. Re:Difference is level of detail and corner cases by Nursie · · Score: 1

      The engineer uses the hammer too, because management have decided there is not enough time or resource to implement the perfect fit, despite the future savings in support costs.

    4. Re:Difference is level of detail and corner cases by SenseiLeNoir · · Score: 1

      I hear you! my analogy is an idealistic view of the roles. However, like any other professional, even developers have to switch roles and wear different hats.

      A "programmer/assembler" hat to sometimes save his/her ass if something totally impossible is asked for, and even attempting can lead to trouble. Saying it cannot be done with reasons can sometimes have less risk attached.

      An "engineer" hat ideally. However, needs to be done well, transparent and documented to save from further ass chewing in the cases where others may see it as "too complex"

      A "hacker" hat if the product owner needs something yesterday and the hacking option is the only option. However, make sure that you document the hack well, and why it was done, so that further ass chewing doesnt happen.

      --
      Have a nice day!
    5. Re:Difference is level of detail and corner cases by jawtheshark · · Score: 1

      ... alternatively, you can use the hammer on sales. ;-)

      --
      Ahhh...the great dumpster continuum. Many a free computer will be found there. -- sowth (748135)
    6. Re:Difference is level of detail and corner cases by Sipper · · Score: 1

      My favorite analogy, which seems sort of fitting:

      optimist: "the glass is half full"
      pessimist: "the glass is half empty"
      engineer: "the glass is twice the size it needs to be" ;-)

  24. Aesthetic Sense by sydneyfong · · Score: 1

    This is purely anecdotal experience, but people from academia tend to write code that is a bit more "ugly" than seasoned "software engineers". By "ugly", I mean the code works, but it's relatively less readable and harder to maintain and extend.

    Other than that, it's pretty much the same thing, IMHO. There's nothing so magical/mythical about "software engineering", and practices between companies can be very different.

    --
    Don't quote me on this.
    1. Re:Aesthetic Sense by Anonymous Coward · · Score: 0

      This is purely anecdotal experience, but people from academia tend to write code that is a bit more "ugly" than seasoned "software engineers". By "ugly", I mean the code works, but it's relatively less readable and harder to maintain and extend.

      Other than that, it's pretty much the same thing, IMHO. There's nothing so magical/mythical about "software engineering", and practices between companies can be very different.

      Hah. Definitely not the same thing. I work in a research institute and I look at academic code all day long. You've got files on one hand which are one gigantic function verses a correctly written one which is nicely decomposed. Guess who wrote the latter?

    2. Re:Aesthetic Sense by sydneyfong · · Score: 1

      By "ugly", I mean the code works, but it's relatively less readable and harder to maintain and extend.

      Hate to quote myself. I'm violating my sig.

      --
      Don't quote me on this.
    3. Re:Aesthetic Sense by mikael_j · · Score: 2

      Sadly I think there is some truth to this.

      Writing clear, readable code that was modular and extensible doesn't mean too much in the academic world (unless writing the code in that way is your primary reason for writing the code).

      Looking back at some of the code I wrote as a student, as well as code from other students and faculty members that I encountered I have to admit that there was very little future-proofing involved. Rewrites were very common (due to code often being written to just do one thing).

      Not to mention the attitude of "it's supposed to do X, it does X, thus the inability to handle input from software package Y is not a bad thing" even though Y was the most commonly used software on the market. Didn't matter how simple the fix was. In a way I can see some striking similarities between this and the attitude displayed by the maintainers of some open source projects back in the 90s (hell, a few still have this "Closing: SEP, Wontfix" attitude and in extreme cases won't even accept patches because they don't feel the bug/feature is important enough for them to skim the submitted code before merging it).

      Of course, that's not to say the business world is all about perfect code, one thing I never saw in the academic world was atrocities like 40+ character variable names (complete with multiple typos) or applications that did all their business logic in T-SQL stored procedures with no comments, heavy use of cursors and of course the obligatory 50+ line SELECT query with at least 15 joins...

      --
      Greylisting is to SMTP as NAT is to IPv4
  25. Empathy by ProgGuy · · Score: 2

    When you work in a team, try to put yourself into other people shoe to try and understand how they see the project you are working on. This will let you learn about how software is perceived by others and the place it has in a business environment. It will also teach you to play nice with others, which is a great quality.

  26. Get a mentor by Mia'cova · · Score: 4, Interesting

    Find someone in your new office to show you the ropes. Every major piece of software tends to have its own issues. For server software you might be looking at analyzing piles of log output. For gaming it might be real time perf metrics. Chances are, the biggest thing to get comfortable with is your debugging->fixing->building->testing->checkin cycle. Make sure you figure out how to get the road blocks out of your way. If you're working on something painful where there's a ton of time wasted rebuilding to try out your ideas, maybe there's a better way to build/patch in a more granular way. Your peers will also be interested in any process improvements. If you can optimize and speed up a process that makes you more effective, share it with the team. People really respect and appreciate anyone who can make their life easier.

    And *really* spend some serious time trying to learn your software's object model, lifecycles, and data structures. When you start there will be an overwhelming amount of information. You need to accept that. But once you've got a bit of a foothold, CONTINUE learning. You want to be an expert. It takes discipline to get a broad and deep enough understanding to truly be efficient and effective. Be interested in the work of your closest peers. Chances are, what they have learned over the years can be incredibly helpful to enhancing your efficiency. At the end of the day, you'll be primarily judged on reliability and throughput. Whatever you can do to meet your goals, the better! And never be afraid to get help. It doesn't matter if someone helps you finish something. All your manager cares about is that the task is done. If they assign it to you, you are responsible for driving that task to completion. If you don't have an a clear idea of how to do something, that's your cue to immediately find someone to brainstorm with.

    And career-wise, it's easier to advance in the earlier years. So when optimizing towards success and a happy retirement, a lot of it comes down to how quickly you can advance in your early years. Down the road, it's as much time as ability. To start with, it's all work ethic. Put in that extra 10% to be the hardest worker and you'll be getting promotions year after year. Work through those lower levels as fast as you can so you can enjoy the rest.

    Good luck :)

    1. Re:Get a mentor by Anonymous Coward · · Score: 0

      If that doesn't work, find the weakest programmer in the yard and berate them in front of everyone...make them your "bitch". People will immediately learn not to mess with you and you'll be able to eat your lunch in peace.

  27. Keep hacking by russotto · · Score: 0

    Fuck it. The day programming is reduced to a discipline, where you can follow some process outlined in a three-ring binder or a management book-of-the-month and turn out product like a bricklayer turns out walls, is the day there's no point in being in it any more. Hell, when it gets to that point, the last programmer can just write some software to automate the process. Keep on hacking.

  28. code reading by Anonymous Coward · · Score: 0

    Read *lots* of code. On the job is a perfectly good place to do this.
    Bad code.
    Worse code.
    Code that makes you laugh out loud .....
    Check with others and see if they laugh too.
    If they defend it, listen critically to what they have to say.
    If they laugh, then don't write code like that.
    Teach others how to not write code like that.

  29. Hacking and Engineering by Crash+McBang · · Score: 5, Interesting

    Engineering a house:
    1. Gather requirements
    2. Write a spec
    3. Design house to spec
    4. Build house to design

    Hacking a house:
    1. Nail boards together
    2. Step back
    3. Is it a house yet?
    4. No, go to 1

    Both methods work, but I'd prefer the former to the latter...

    --
    To put a witty saying into 120 characters, jst rmv ll th vwls.
    1. Re:Hacking and Engineering by Anonymous Coward · · Score: 0

      Both methods work, but I'd prefer the former to the latter...

      Perhaps, but nobody expects an architect to put up with the client deciding halfway through that it shouldn't be a house, it should be an aircraft carrier. Then a week later, a skyscraper...

    2. Re:Hacking and Engineering by Anonymous Coward · · Score: 0

      I think it depends on the goal.

      If i am trying to break something, a hack-together solution might work the best. Its not code that i am going to try and maintain.

      A software program on the other hand is completely different. Requirements and design have a lot more importance.

    3. Re:Hacking and Engineering by El_Muerte_TDS · · Score: 2

      And professional software development is usually more like the latter than the former.

    4. Re:Hacking and Engineering by wvmarle · · Score: 1, Funny

      LOL

      The big difference with house vs. software is that when you nail some boards together it's quite permanent, and hard to remove and redo. I admit to do programming mainly alone the second line, but usually with something like a plan, and working quite targeted to it. More like:

      1. Nail boards together.
      2.Step back.
      3. Location correct, all straight up and aligned with the rest? goto 6.
      4. Redo latest board, and/or adjust previous boards.
      5. goto 3.
      6. Looks like a livable house? end.
      7. goto 1.

      But then without the goto statements :-)

    5. Re:Hacking and Engineering by laejoh · · Score: 1

      A hacker uses GO TO while an engineer doesn't?

    6. Re:Hacking and Engineering by Anonymous Coward · · Score: 0

      You forgot:

      5. Inspect house to prove it conforms to design and applicable regulations.

    7. Re:Hacking and Engineering by digitallife · · Score: 1

      Lmao
      That's exactly right. The only thing you missed is that software 'engineering' is a synonym for 'hacking'. It's a glorified term because we hate calling ourselves code monkeys.

    8. Re:Hacking and Engineering by Noctris · · Score: 1

      And Neither should a developer / Engineer. It took me a while to get this through to people but at our place, we now build what was requested.. changes or features go on the V-next list and can be built then.. it improved our quality AND timeframes dramatically

    9. Re:Hacking and Engineering by Anonymous Coward · · Score: 1

      Engineering software:
      1. Gather requirements
      2. Write a spec
      3. Design software to spec
      4. Build software to design
      5. Note a million differences between the design and the actual requirements, and weep

      Hacking software:
      1. Requirements are in your head
      2. Spec is in your head
      3. Design is in your head
      4. Implement 2% of the design
      5. Observe immediately obvious issues; update spec & design
      6. Goto 4

      Fortunately, software is more malleable than concrete and brick, which is why we don't develop it in the same way we develop buildings.

    10. Re:Hacking and Engineering by Ash+Vince · · Score: 1

      Engineering a house:
      1. Gather requirements
      2. Write a spec
      3. Design house to spec
      4. Build house to design

      Then
      5. Gather new requirements as you have 3 children that came along while you were doing step 4 :)

      --
      I dont read /. to RTFA, I read /. to offend people in ignorance.
    11. Re:Hacking and Engineering by Anonymous Coward · · Score: 0

      Engineers don't design houses, Architects do.

      I say this as a Registered Professional Engineer in the construction industry. I have worked with a lot of Architects on a lot of projects. Some were even large houses or apartments.

  30. Maintainability by spiffmastercow · · Score: 4, Insightful

    Ignore the assholes. Debates about the meaning of 'Engineer' aside, what you really need to learn is maintainability, testing, and patience. Writ code that you wouldn't mind maintaining if you weren't the original author. Don't repeat yourself. Follow coding standards. And most of all, learn to work with others and leave your ego at the door. That's what separates a 'hacker' from a professional.

  31. I'd say your number one goal is by NotSoHeavyD3 · · Score: 2

    To make your code readable. I mean so that if you came back to your code in 6 months you wouldn't have to completely reverse engineer it to figure out what it does.(Since I'm guessing you effectively threw away any coding efforts you did for your projects about 30 seconds after it got graded.) If you write your code with that in mind after a while you'll be fine.(Because believe me, either you'll be coming back to your old code or you'll be coming back to somebody else's old code and it sucks when it looks like the app was put together with figurative chewing gum and duck tape.)

    --
    Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
  32. Learn to read code by donscarletti · · Score: 3, Interesting

    Welcome to the farse of "Software Engineering", the sooner you realise that the way things happen in the real world is just (as you say) hacking stuff together and debugging it the better. The only added fun that you will have no idea what 70% of your codebase does and neither does anyone else.

    While Software Engineering never provided any credible way of _building_ the systems, what it used to do is provide ways where you could find out exactly what you need before you start building it. These days we have Agile instead, so we don't do that, we just pick an idea at random and hope to god it's either right or we can change it.

    My advice: Learn to read code. Learn to find out what the system actually does, not what the comments says it does. Learn to read it then work out how to slowly change it into what you need. It's the difference between the respected senior guy who fixes the problems and the detested junior guy who creates them. I work with a commercial 3D game engine and the fact I know every line of it is worth far more to anyone than how many lines I can myself write in a day.

    --
    When Argumentum ad Hominem falls short, try Argumentum ad Matrem
    1. Re:Learn to read code by Palshife · · Score: 1

      Farce.

      --
      Attention deficit disorder is a complicated issue, spanning several major... HEY LET'S GO RIDE BIKES!
  33. Testing and readability by Fastolfe · · Score: 2

    You say you've done some "basic" testing, but one of the biggest challenges for me upon entering a "real" software development role was adapting to test-driven development. Even if you don't take this all the way and write up all of your unit tests before you start coding, you do have to completely re-think how you structure your software so that it can be testable at all. This means breaking up your functions not just into parts that make it more readable, but into parts that can be independently tested. Usually this means breaking out your dependencies into interfaces, so that they can be mocked out (oh, and learning how to mock things), avoiding side effects, that sort of thing.

    Also focus on writing readable code. I usually make one or two passes after I think I've gotten everything written and refactor with an eye toward making everything readable and understandable.

  34. In Canada... by Anonymous Coward · · Score: 0

    In Canada, you can't call yourself an "engineer" unless you have the academic degree that designates you as such. The PEng designation is only given if you actually got an engineering degree, and without that you are not really an Engineer. The local professional organizations for each jurisdiction might also oppose your use of the title. The justification for this is 1) to ensure that all people who call themselves engineers can actually be trusted to do good work, and 2) to that engineers can be self-regulated to remove dishonest and/or incompetent engineers.

    Now, if you want to call yourself an software engineer, without the PEng designation, then you're still not really an engineer... Might I suggest "Programmer" or "Technology Specialist" or some other generic tech-related title? The other option is to get a proper degree in software engineering, so you can actually call yourself a software engineer, and be recognized as such.

  35. Deliver. by Anonymous Coward · · Score: 0

    That's right, finish the job. Yes find a way to incorporate what you like to maintain job satisfaction, but your main role is to deliver, if you expect checks to not bounce. That's the difference between a pro and a dilettante.

  36. all making sense until mythical man month by Surt · · Score: 2

    That's more of a management book. If you want to get better at coding practices, you want a different library entirely. Try reading something like code complete or refactoring to patterns.

    --
    "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    1. Re:all making sense until mythical man month by jackjumper · · Score: 1

      Yes! Get all three. Code Complete by Steve McConnell, Refactoring, by (I'm pretty sure) Martin Fowler, and Design Patterns, by Erich Gamma et al. Understand these three books and you'll be well on your way.

  37. Come on. by slasho81 · · Score: 0

    Sounds like you have a semantic crisis.

  38. Hacker is used as an insult by Anonymous Coward · · Score: 0

    I was once nearly worked at 3COM, the project was a joke, I mean 10 people working on a crap design that one person could have done in a week a lot better (think hierarchical network nodes shown in flat lists because none of them new how to make a list hierarchical, or that you add a node in 3 steps but delete it in 1 since you needed to manually specify the parent node each time). I decided to excuse myself from the project as soon as I saw it. The programmers said I was a hacker (he said it as an insult), and I said "yes I guess I am", when actually I would like to have said "you guys are an incompetent bunch of useless idiots and if the rest of 3COM is like this then you'll fade to nothing". But I just wanted out of there, it was easier to say "I'm not good enough for your project" than to say "are you seriously this incompetent?".

    What software engineering is, is what you describe as hacking, and what management consultancies claim software engineering is, is what you read about in these failed projects that take 10 years and end up cancelled. There's a lot of bullshitters in IT that never deliver anything working, but talk a lot who'll call you a hacker.

    Testing is not your department, you cannot test your own work because any assumptions you make you repeat in the testing process. It does not diminish your role that nobody tested things properly, that diminishes the project leaders role in failing to organize testing.

  39. Agile vs. Waterfall by Tony+Isaac · · Score: 3, Insightful

    Your contrast is not really hacker vs. engineer, but agile vs. waterfall.

    If you think building software is like building a building (spec it out in detail before you start, write tons of documentation, resist any change orders)--that's "waterfall" methodology, what you are referring to as "engineering."

    If you want to start with a software sketch, show the sketch to your customer, and then incrementally improve it until the shape develops into something really useful and valuable--that's "agile" methodology, what you are referring to as "hacking."

    Both are totally legitimate forms of software engineering. But waterfall-style "engineering" is cumbersome, slow, extremely expensive, and tedious. If you love programming, pick a small company with an agile mentality. I've done both styles, and I don't ever want to work in a large software shop again!

    1. Re:Agile vs. Waterfall by mdjnewman · · Score: 1

      that's "waterfall" methodology, what you are referring to as "engineering."

      I've done a BE in Software, and both methodologies were taught and covered well.

      "waterfall" != "engineering"

    2. Re:Agile vs. Waterfall by forkfail · · Score: 1

      Disagree.

      In fact, I'd actually say that the terms engineer and hacker are somewhat orthogonal.

      How much of a hacker someone is is a matter of passion.

      How much of an engineer someone is is a matter of discipline.

      --
      Check your premises.
    3. Re:Agile vs. Waterfall by olau · · Score: 1

      Both are totally legitimate forms of software engineering. But waterfall-style "engineering" is cumbersome, slow, extremely expensive, and tedious. If you love programming, pick a small company with an agile mentality. I've done both styles, and I don't ever want to work in a large software shop again!

      I'm with you, except I think you're being too kind too the waterfall model. If you read Fred Brooks' The Design of Design he explains why the waterfall model is flawed and mentions that it was actually presented in one of the first papers about it as an example of how not to do things.

      The main problem with it is that it does not allow any learning on either side of the fence.

    4. Re:Agile vs. Waterfall by dkf · · Score: 1

      The main problem with it is that it does not allow any learning on either side of the fence.

      I'd express that differently: the main problem is that it assumes that the requirements can be (in practice) totally known before coding starts. The waterfall model works for things like houses and bridges, where the basic requirements are well understood by all, but software is more flexible and less understood. Having fast iterations with feedback — the core of Agile — works better for much software development because it helps everyone converge both requirements and the implementation.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    5. Re:Agile vs. Waterfall by Ash+Vince · · Score: 1

      that's "waterfall" methodology, what you are referring to as "engineering."

      I've done a BE in Software, and both methodologies were taught and covered well.

      "waterfall" != "engineering"

      But have you worked in both environments in a real company. Academic study of how to write software is worth very little compared to actually doing it professionally for a similar amount of time. Sorry, but a BEng is nothing of 3 years experience writing code for a living.

      For one thing at uni you very rarely get marked on stuff as a team. In the real world everything depends on a project being completed as a team and if the project fails, then whole team has failed.

      --
      I dont read /. to RTFA, I read /. to offend people in ignorance.
    6. Re:Agile vs. Waterfall by AnonyMouseCowWard · · Score: 1

      Writing code professionally does not ensure you know what good practices are, in fact I'd argue that very often it shows you the contrary.

      I have a B. Eng, and have coded professionally for a living for a small "agile" company and a big multinational software shop. Working in a small agile company is fun, but despite implementation of "best practices", the projects/company is not nearly complex enough for you to understand how problems scale. Working in a big shop teaches you that the theory that you learned in school is not always applied, that it should, but that realistically, with deadlines, upper management directives and global industry trends, it's not always realistic to have a perfect software development process.

      Also, I don't know what university you went to. All my software engineering classes involved projects with at least a 4-5 people team and a customer, and in fact shows you more of the entire software lifecycle (including requirement gathering, specs, prototyping, testing, UAT and such) than a job at many companies where you'll be stuck doing one part of the cycle. It's not equivalent to working for 3-4 years, but not any less valuable.

    7. Re:Agile vs. Waterfall by Ash+Vince · · Score: 1

      Writing code professionally does not ensure you know what good practices are, in fact I'd argue that very often it shows you the contrary.

      Nope definitely not. The poster I replied to though seemed to be saying he was an expert only because he had studied a BEng in software engineering. He only made mention of his academic qualification (actually, he didn't even say that, he just said studied) and that was why he knew all about software development, that is utter crap.

      The best way to learn about developing software is to do it, full time, in a few different environments. I have spent 3 years working for a small company developing small stand alone agile projects. Then I moved on to work in a slightly larger company working as part of a team on a common codebase we all contribute to, I have been there 6 years. Both roles have taught me a lot. In my first role any mistakes you made you learned from quickly, but since each project was done and dusted quickly you very rarely had to struggle with legacy code. In my current role that is much more common as the same code has been constantly being tweaked and added to for almost a decade.

      --
      I dont read /. to RTFA, I read /. to offend people in ignorance.
    8. Re:Agile vs. Waterfall by Aighearach · · Score: 1

      So presumably if you have a single engineer who does understand software, they could simply do the design up front, and then all the other people below them who don't understand it can simply build the part of the design they are assigned.

      It often seems to produce a poor result, but then, there are also a long line of "agile" projects that were never finished scattered broken on the rocks.

      You can easily walk into an expensive custom house and point at a zillion things that you could have done better. Doesn't mean their design process had any problems.

    9. Re:Agile vs. Waterfall by mdjnewman · · Score: 1

      I'm not claiming to be an expert, I just don't think that using a waterfall methodology implies that you're doing 'engineering' or that using an agile methodology implies that you're 'hacking'. Both have their place.
      Cheers

  40. Read Code Complete by Anonymous Coward · · Score: 0

    Code Complete is a great book that focuses on teaching software programmers how to manage software projects. It will do a good job of showing you what else you need besides code to finish a project.

    1. Re:Read Code Complete by tigersha · · Score: 1
      --
      The dangers of excessive individualism are nothing compared to the oppressiveness of excessive collectivism
  41. Are you asking how to get more consistent results? by unimacs · · Score: 1

    Fewer bugs?
    setting good deadlines and meeting them?
    Happier users?

    There are lots of different software development "methodologies". To me that's what you're talking about. Which one is right for you depends on a number of factors. Whatever organization you end up working for might already have one and your job will be to learn it. If you're in a position where you are the one to decide what your process is going to be, then you've got some research to do.

    Not all methodologies are appropriate for all applications. I suggest starting to learn about the "agile" family of methodologies if you're working in a small team.

  42. I had the SAME question by Anonymous Coward · · Score: 0

    Good question, you're not alone in asking it. Change the question a little bit, rather than asking about yourself, generalize it. Most CS students complete assignments that way, so the question becomes 'how does ANY person learn to engineer effectively'. Certainly practice plays a large part, but quite frankly I think time is what really teaches this.

    If learning to engineer didn't happen naturally then NOBODY would could do it. Every problem given to a CS student is going to require a platform and have a unique set of requirements, these details will guide most of the major decisions. You'll only need to architect 25% of the final solution and this is where most of the discussion and engineering will take place.

    Also, as an entry level MS student, you'll never be given a task you can't complete at a normal company, even a start up. Trust me. Nothing to worry about, especially when entering a large company.

  43. Engineer by Wolfling1 · · Score: 3, Insightful

    Sounds like you already did.

    The biggest problem most techs face is their own arrogance. Your desire to mature as an engineer sets you apart from many of your peers.

    Perhaps on a more practical note, I'd suggest that you plan to spend six months to a year working in a beauracracy nightmare shop (eg a bank).

    If and when you come out of the end of that experience, you will be much better positioned to apply the theoretical knowledge, and you will also be sufficiently jaded with process overkill.

    However, my strongest suggestion would be to keep doing what you're doing. Allow a little time each week to continue developing your expertise. That habit distinguishes the masters from the journeymen.

    1. Re:Engineer by tigersha · · Score: 1

      > The biggest problem most techs face is their own arrogance.

      Bingo. Don't look down on your peers. You are not better than them just because you like vi.

      --
      The dangers of excessive individualism are nothing compared to the oppressiveness of excessive collectivism
    2. Re:Engineer by Anonymous Coward · · Score: 0

      ...but you are if you like Emacs.

  44. EIT then PE test by Anonymous Coward · · Score: 0

    Most states have a pretty clear cut path to becoming an engineer. Take an EIT test, work in a related field for some years then take a professional engineer exam.

  45. Think Inside the Box by Mafiasecurity · · Score: 1

    Engineers know the box. They know everything about inside the box and are experts about the box. Hackers know the box; however, they look at how they can change the box.

    1. Re:Think Inside the Box by Steauengeglase · · Score: 1

      A hacker looks at the box, puts his hand in blindly, feels around for something familiar and delights when he thinks he has figured out what the engineer was thinking. He then figures out how to have fun with the box.

  46. pool game analogy by Anonymous Coward · · Score: 0

    A professional 'pool engineer' will analyze the table, formally state his intensions (3 ball off the rail into that corner pocket) and then execute it successfully. I am a 'pool hack'. I will the analyze the table looking for something a I can make, take aim and shoot hoping something goes in somewhere.

    So I think the difference is two-fold: 1) the skill set to analyze/execute a successful solution to a problem and 2) the formality of planing, costing and documenting the solution.

  47. Engineer's solution by S3D · · Score: 1

    Academic concentrate on the finding out where his solution works. Engineer mostly concerned with situations what to do if it doesn't.

  48. I'm in suspense. by Anonymous Coward · · Score: 0

    Tell me how to hire engineers and what makes a good one... and the best interviewing strategies.

  49. Coding practice by glebovitz · · Score: 1

    I think experience on commercial projects allows you to develop better coding practices and develop skills for estimating project size. It usually takes 6 months to a year for one of our fresh masters level graduates to become fully productive.

    At our company, we won't hire you unless we are pretty sure you can do the job. It is our responsibility to make sure you learn the skills to be productive.

  50. Test Driven Development by SplashMyBandit · · Score: 2

    Learn about Test Driven Development (TDD). You don't need a book on it, simply use Google and learn about its importance for software quality, and learn how to use JUnit. Adopting TDD will change your development process and the way you develop software. Your software will be more correct, more reliable, you'll have an automated suite for maintaining it and your software will be better designed and more modular (required to be more testable). Once you get the "testing religion" your view on good development style will change (and you'll see that a lot of the software development "orthodox" wisdom is actually counter-productive to testing and what really matters when developing reliable software quickly).

  51. Work for an Engineering company by darkwing_bmf · · Score: 1

    On the job training of course. Work for a company that does Engineering and Manufacturing... preferably something like Aerospace where they have dedicated software testing teams and rigorous design documents.

  52. You have to specify SOFTWARE engineer by Swampash · · Score: 5, Funny

    So you don't get confused with a real, actual engineer.

    1. Re:You have to specify SOFTWARE engineer by H0p313ss · · Score: 1

      Agreed, I prefer to call myself a Software Alchemist.

      --
      XML is a known as a key material required to create SMD: Software of Mass Destruction
    2. Re:You have to specify SOFTWARE engineer by Opportunist · · Score: 1

      My boss used to call me the evil wizard, does that apply too?

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    3. Re:You have to specify SOFTWARE engineer by Anonymous Coward · · Score: 0

      old elitist engineer debate is old.

      to OP - see ieee for software engineering disciplines if you are not confident enough with your own.

    4. Re:You have to specify SOFTWARE engineer by dkf · · Score: 1

      Agreed, I prefer to call myself a Software Alchemist.

      As opposed to an Open Sourceror?

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    5. Re:You have to specify SOFTWARE engineer by Anonymous Coward · · Score: 1

      I've done mechanical engineering and a CS degree. I actually decided to do the CS degree after having problems with programming in the engineering degree - (we did a module on Fortran77 and the tutor was a complete ass who seemed to relish confusing people).

      Software development has many things in common with other engineering disciplines but it's not as mature... hence not as reliable. There are still things missing from software development that are a cause of having so many different menthods (languages and methodologys). When a building is being signed off it gets a survey, and this is an independent organisation. Then if all is well people know it's safe to be in. But this doesn't happen in software and as a result people happily work away in a crumbling wreck of a program wondering why it's "not responding". Then they blame the computer.

      From experience if you are dealing with third partys, make sure you give them a clear specification with no possible ambiguity and have a testing / acceptance plan to make sure you don't end up debugging other people's work (that's if you are even allowed to view the source code).

    6. Re:You have to specify SOFTWARE engineer by sco08y · · Score: 1

      So you don't get confused with a real, actual engineer.

      Look, I don't see why people respect real, actual engineers so much. The ones on the DC Metro can't even pronounce the names of stations properly, and have a hard time centering the train on the platform.

    7. Re:You have to specify SOFTWARE engineer by Anonymous Coward · · Score: 0

      i put on my robe and wizard hat

    8. Re:You have to specify SOFTWARE engineer by jekewa · · Score: 1

      Word up. I use "Software Smithy" as many projects are trying to bang two moving projects together as it is about any kind of design or engineering. And, yeah, I got the CS thing going, but as the OP points out, the academic is nothing like the actual.

      --
      End the FUD
    9. Re:You have to specify SOFTWARE engineer by Bob9113 · · Score: 1

      So you don't get confused with a real, actual engineer.

      Yeah, no kidding. Have you seen what actual engineers get paid? For god's sake, don't confuse me with an actual engineer.

      P.E.s who work in fields like mechanical engineering, and look down their noses at software "engineers" remind me a bit of fighter jocks in the sixties calling astronauts "spam in a can". Yeah, sure, true enough... I'm going to go whiz around the Earth at four miles per second now. :)

    10. Re:You have to specify SOFTWARE engineer by Swampash · · Score: 1

      Software development has many things in common with other engineering disciplines but it's not as mature... hence not as reliable.

      I call bullshit on this. Given the population of the world and the explosion in information technology, I'd wager that more man-hours got spent on "software engineering" worldwide in the past year than have been devoted to the study of real engineering since the beginning of human civilisation.

  53. Take a Test. by 0100010001010011 · · Score: 1

    Take the FE (and the Canadian/European) Equivalent and tada. You can call yourself an engineer.

  54. It is kinda a grey area, but dont worry. by patomuerto · · Score: 1

    I was in a similar situation a few years ago. This was the most useful article I found,

              http://drdobbs.com/architecture-and-design/217701907

    But really don't worry that you are not a verse in SE. I would say the majority who program have just a small working knowledge. The smartest thing to do is when you get to your job is ask what their processes are and what they expect. Use the terminology, like agile, cmmi, unit test, process development, etc. If they have a process or model they are following, they will be thrilled your asking. If they don't then hope they are all master programmers and everyone works well together.

    --
    I have secretly hidden some mispelled words in this post. Can you find them?
  55. Have one such case right now by tigersha · · Score: 4, Interesting

    I have a hotshot hacker working for me right now who thinks he knows everything, but he is just a stupid little hacker who thinks his dick grows every time he uses vi. Don't be like that.

    You are already on the right path: You recognized in yourself that you need to grow professionally and that you need to get away from the little dark screen and see how it fits into the world.

    Three points:
    * See the first for the trees
    * Have the balls to say "I don't know"
    * Education, education, education

    Here is the most important thing to remember: A hacker sees his own little thing that he hacks on. An engineer see how that thing fits into the world and people who uses it. See the forest that your little tree grows in.

    All companies and industries have standards, habits and a culture that it uses and the people are almost always NOT used to or interested in the little details that fascinate a hacker.The people out there will not change their entire culture to fit your hacking needs. The job of any technology and the engineers that build it is to facilitate the and simplify the lives of other people.

    Professionality means that you take responsibility for your work. That includes taking responsibility for the interface to the users.

    Read this:
    The Clean Coder: A Code of Conduct for Professional Programmers (http://my.safaribooksonline.com/book/programming/9780132542913)

    Number two: You cannot know everything. Accept it.

    There is nothing wrong with expanding your horizons and going past your field, but when you are in a terrain where you are uncomfortable make sure your peers know it and make sure you have a mentor and listen to him. Or delegate to an expert. People will have a much higher esteem for you professionally if you have the balls to say "I don't know" instead of lying. It can be hard sometimes, but it beats being known as an arrogant little know-it-all.

    Point number three: Education, education, education. Always assume you know nothing. Read up about your industry outside of the computer part. Computers are just a tool to make the gears turn. You will be a much better engineer if you know what the gears look like.

    Good luck. You already took the first step and you will make it.

    --
    The dangers of excessive individualism are nothing compared to the oppressiveness of excessive collectivism
    1. Re:Have one such case right now by laejoh · · Score: 1

      he is just a stupid little hacker who thinks his dick grows every time he uses vi.

      Ron Jeremy uses emacs, obviously!

    2. Re:Have one such case right now by turing_m · · Score: 1

      ...but he is just a stupid little hacker who thinks his dick grows every time he uses vi. Don't be like that.

      Experienced hackers know that eventually a limit is reached. And while vi is reputed to promote growth, if you want to go the other way the key of course is EMACSulation.

      --
      If I have seen further it is by stealing the Intellectual Property of giants.
    3. Re:Have one such case right now by tigersha · · Score: 1

      Maybe I should have said "his dick grows whenever he uses a command line and a green screen instead of a GUI"

      Here is the rule to remember for hackers: Form vs Function is not a zero sum game.

      --
      The dangers of excessive individualism are nothing compared to the oppressiveness of excessive collectivism
  56. Should of went to a tech school CS is not for work by Joe_Dragon · · Score: 0

    Should of went to a tech school CS is not for real work skills. Even more so at the MA and up level.

    How much real work did the classes cover?

    You need to get some real work skills or at least do some open source work?

    In the real work place you will see lot's of old code and other left over stuff that you will need to work with.

  57. Starting out by popsensation · · Score: 1
    I think your question is good. There are a lot of problems with new developers and most of them revolve around the patterns and habits they get into working on projects which are difficult and impractical. I think the easiest way to get over that is start thinking about your time as money. Don't waste either.
    1. 1.) If you can't figure something out and you have a feeling it's easy for another team member to explain, check google/sources for 1 minute. If you don't find it that quick ask somebody. I can't express it enough, when new dev engineers ask questions under this rule set they are so much more efficient.
    2. 2.) When filling in a spec only consider algorithmic efficiency when it is more timely. Otherwise mark it //TODO - Could be more efficient
    3. 3.) Spend time getting acquainted with the libraries and tools available to you. Ask other engineers, they will gladly share their rig.
    4. 4.) When you think, 'someone on my team has probably done this', ASK. If they haven't write it into a shared libraries or utils that team members can use.
    5. 5.) Fitting more then one task on a line isn't better programming, it is usually annoying, do one thing at a time.

    I hope that helps!

  58. Software Engineering? by Anonymous Coward · · Score: 0

    First, Coders are not engineers. There is no liability, or signing of code (in the way drawings and designs are signed).

    Second, sadly, that is the real word.

  59. Dealing with people by Frans+Faase · · Score: 2

    Most software developement takes places in teams, which means you have to learn to deal with people and code written by others. That means having to deal with colleagues who use a different coding style than what you would prefer. Who use a different way of formating code, naming conventions that you are used to. You will have to resist the temptation to reformat all the code that you encounter. Also you will encounter strange code constructions that you think are wrong. And often they are also wrong, but they work (for the moment), and you have to learn to resist the temptation to start refactoring the code. Especially if you are working with a code manangement system, do not make any unneccessay changes to the code, because you are creating extra work for those who review your checking, because they have to spend extra time, and they don't like this. Also don't feel hesistated to make 'stupid' questions, and listen to the answers you get. Sometimes, you will be told that something is there for historical reasons, and that is often the only reason that it is there. And there will be colleagues that you will get around easier than others. Actually the whole messages burns down to: learning to adapt to the style of others and having the right attitude. Software enginering is often a group effort against an individual effort as you have been doing now. For the rest it is still 80% hacking the way you have been doing it.

  60. There is nothing wrong with printf debugging by Anonymous Coward · · Score: 0

    Really folks, can we do away with this persistent lack of respect for logging style debugging. Most IDE debuggers suck if you need to look at more than the internal state of a single function. Yes, there are instances where debuggers are better (conditional breakpoints in a long running loop, for example), but I get far more info out of debug logging then tracing through a function in a debugger.

    As for the OP, you have nothing to worry about. Those who lose their hacker mentality and approach everything from an academic standpoint are the ones with a problem.

    1. Re:There is nothing wrong with printf debugging by OrangeTide · · Score: 1

      I agree. Using printf debugging is just one of many tools for trouble shooting. It's not the end-all-be-all but nothing is. I tend to flip between printf debugging and full JTAG remote debugging with very little in between. (nothing against application debuggers, they can be another useful tool)

      Prints can add delays in a program and made race conditions disappear, which can be quite frustrating. But I also find fancy debuggers add unusual behaviour to a program which often result in tracking down some inaccurate stack trace or causes multi-threaded programs to act in a single threaded way.

      Custom hacks to do some data collection that you can dump without much overhead is a pretty helpful tool for debugging the tougher problems. Also what can be troublesome to debug are programs that don't crash or corrupt and just perform the wrong calculations, like in video and image codecs where you can easily introduce tiny floating point errors that are not immediately obvious.

      --
      “Common sense is not so common.” — Voltaire
    2. Re:There is nothing wrong with printf debugging by Altus · · Score: 1

      If you fix every problem with printf debugging you are likely to waste a lot of time when you are solving problems that are easy to solve in IDE debuggers. Sure, I still fall back to printf debugging when its the best tool for the job and sometimes its really the only tool for the job but its only one tool.

      Really the best advice might be to understand how to use tools. I don't mean go out and learn every tool you can, or master one IDE and source control system. I mean try to understand how IDEs and debuggers work in general along with source control, build systems, test systems and analysis tools. Obviously you want to become proficient with your toolset but understanding how you might manage source control branches to manage a release or what kind of analysis tool you might use to find a performance problem or a memory leak.

      I think the best advice is to work at a place where a decent number of people understand these things and learn from them but finding such a place can be difficult especially when you are inexperienced.

      --

      "In America, first you get the sugar, then you get the power, then you get the women..." -H. Simpson

    3. Re:There is nothing wrong with printf debugging by nsfyn55 · · Score: 1

      The best advice is do what works for you, not what works for the guy that sits beside you. Linus vetoed debuggers in the kernel for years and that code runs half the planet.

  61. do what you're good at by Goldsmith · · Score: 1

    If you're good at something, enough that someone will pay you to do it, then go for it.

    We need some people with the "hacker" mentality, they're like the blueberries in a blueberry muffin. Sure, you can make a muffin without them, but it's just not going to be as good.

    1. Re:do what you're good at by Opportunist · · Score: 1

      Sadly, managers would probably accept the muffin without the blueberries because it's cheaper and it kinda does the work (i.e. stuff you sufficiently). Sure, it would be better with blueberries, but ... well, there's a budget to keep.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
  62. Time. by forkfail · · Score: 2

    It's all about time and experience.

    As long as you know that growth is possible, and worth striving for, and keep that as part of your outlook, the maturity will take care of itself.

    --
    Check your premises.
  63. Wrong by Anonymous Coward · · Score: 0

    Engineers ENVISION, DESIGN and CREATE the box, which a hacker is dependent on. Engineers don't need hackers, hackers need engineers to do the hard work first.

    1. Re:Wrong by Opportunist · · Score: 1

      The problem is that managers want a shoe box, engineers design a shoe box and hackers then sit there and ponder how to fit a TV into it when the manager changed his mind.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    2. Re:Wrong by taj · · Score: 1

      That's why you have the manager sign off on the requirements and functional specification. He can change his mind (and often does as a company better understands the market) but the cost is then his responsibility which he can balance with the potential reward in his decision and communicate a justification to stake holders. If you just make the box, the responsibility is then fairly yours. How was the manager to know the cost of his decision?

    3. Re:Wrong by Ash+Vince · · Score: 1

      That's why you have the manager sign off on the requirements and functional specification. He can change his mind (and often does as a company better understands the market) but the cost is then his responsibility which he can balance with the potential reward in his decision and communicate a justification to stake holders. If you just make the box, the responsibility is then fairly yours. How was the manager to know the cost of his decision?

      Also, try always trying to build a box with extendible sides. If the manager baulks at the cost of this then tall him the only way to save him money as that he cannot possible make the box larger later. Giving them a choice of solutions where the cheapest solution has clearly specified limitations is a good way of covering both angles. He can them make a cost / benefit choice.

      --
      I dont read /. to RTFA, I read /. to offend people in ignorance.
  64. In the words of chess master Emanuel Lasker... by Druid+Squirrel · · Score: 1

    "When you see a good move, look for a better one."

    The most important thing I've learned over the years about being a software engineer is not to rush off and implement the first solution that pops into my head. Often, the hacker mentality is just to crank out a sufficient solution, so that you can pop your stack and get back to whatever it was you were trying to do in the first place. But as an engineer the best thing you can do in that situation is STOP and THINK. Don't let yourself write a line of code until you've had time to fall out of love with your original idea. If your first solution turns out to have been the best one, so be it; you've just wasted an hour. But it's far more likely that the improved solution you get as a result of the investment of that hour will pay your back 10- or 100-fold down the road.

    1. Re:In the words of chess master Emanuel Lasker... by curious.corn · · Score: 1

      I second this, the trick is to STOP and THINK. But get ready to fight for the privilege.

      Many managers will just be fine with the hacked together solution and will probably complain about:

      • your poor productivity
      • your academic mindset
      • your lack of focus
      • your insufficiently result oriented approach

      Don't let them bog you down, they're wrong although in their defense they simply can't see the difference and it doesn't matter to them. Besides, a properly engineered solution will not introduce the sort of design issues that keep them busy in the first place. Don't worry, just move forward and hop around; possibly in a different role every time.

      The Mythical Man Month is a good read, definitely a good read. I could go on with TDD and Enterprise Patterns but let's look out of our industry and get a construction site management manual; you won't understand every technical detail but you should take note of the coordination strategies. Engineering is about craftsmanship but also how to get 100 such fellow craftsmen working together.

      Oh, and be weary of Agile and other fad words... ;)

      --
      Mi domando chi à il mandante di tutte le cazzate che faccio - Altan
  65. Teamwork by eonwing · · Score: 1

    Even if you're the only one developing, you'll want someone else to try it out, shake it and see if bugs fall out. Usually it's more than just you developing it, and other people testing, and other people managing. Getting along with others is the main thing involved with a professional's life as compared to the lone hacker mentality, I have found.

  66. First off, a rant by notandor · · Score: 4, Informative

    First off, a rant. Either your Computer Science program/dept does not truly deserve the name or you did not fully attempt to master the curriculum as it is intended. I know it sounds harsh, I am mostly annoyed by the constant misconceptions about CS that pop up here on /. from time to time.

    A masters degree in Computer Science builds upon the basics of theoretical CS (theory of computation, languages, grammar, logics, discrete math...), technical CS (microcontroller, assembly) and applied CS (functional, OO and logic programming) from a undergraduate CS degree and extends it with topics about Networks (Sockets, Protocols, OSI Layers, Routing), AI (both classical AI with logic, planning and formal systems as well as machine learning), Operating Systems (for instance reimplementing parts of and studying Tannebaums Minix, Filesystems), Databases (Tuple relational calculus, OO databases, inductive databases, knowledge discovery) and also, and this is what I think you definitely missed out on, Software Engineering. This would involve developement models (V-model, Waterfall, extreme programming), UML, testing, maybe software verification, refactoring and so on.

    Note that there is not much hacking (in a positive or negative sense) involved here. Great hackers do not necessarily need to be computer scientists, and competent computer scientists definitely do not need to be or leave the university as any from of hackers (be it some low level C pointer wizards or some OS file system experts).

    I think what you meant to say is that the university did not teach you how to code in an industrial/enterprise setting. And rightfully so, thats the job of a vocational/trade instituion, but not of an university.

    However, let me give you some pointers that helped me to grasp a bit more beyond purely academic programming.

    1. Patterns. As some others have pointed out, this pretty much a must to grok in any OO project. The Gamma book is good, if you are looking for some really good intermediate more applied Java book about this, Effective Java by Joshua Bloch (he developed, among other things, the Java Collections).

    2. Revision control management. One word: git. Anything beyond toy problems should not be touched without revision control. Watch the video with Linus Torvalds (the creator) to get motivated: http://www.youtube.com/watch?v=4XpnKHJAok8
    A pretty good git tutorial that I like can be found here: http://www-cs-students.stanford.edu/~blynn/gitmagic/ch01.html

    3. Read competent peoples code of the language of your choice! github and gitorious are a real treasure. The more you do it, the more you will discover more efficient approaches of how to implement certain concepts. And you will also see a lot of bad code and learn how to spot it.

    4. Testing. JUnit is pretty basic to grasp. Some people swear by TDD (test driven development, write the test case first and then the implementation of what to test), I find this a bit extreme, however unit testing is a must to know.

    5. Program yourself! Pair programming can be very helpful if your mentor is knowledgable and able to teach, otherwise do it yourself. Do not hack for the hell of it (although it can be fun), but focus instead on clean and clear concepts that you want to implement and improve upon. And document your code (doxygen or javadoc are your friends).

    1. Re:First off, a rant by Anonymous Coward · · Score: 0

      everything you mentioned as being part of a master degree in CS I did for my undergrad degree. Has a CS degree changed this much? Is this why I have new hires not know how to open a network socket or what the hell multi tasking is?

    2. Re:First off, a rant by comp-math-hist · · Score: 1

      Finally a good read!

      --
      Walking on water and developing software from a specification are easy if both are frozen.-Edward V Berard
  67. maturity by jesterman · · Score: 1

    "I don't think I'm really mature as an 'engineer'"

    Don't worry. The field is not mature either.

  68. The Doomed Discipline by WeirdAlchemy · · Score: 1

    One of the most eye-opening things I've read is On the cruelty of really teaching computer science by Edsger Dijkstra, one of the old computer science greats. While I don't agree with every point, it's well worth reading, and he has some choice words about software engineering:

    "A number of these phenomena have been bundled under the name "Software Engineering". As economics is known as "The Miserable Science", software engineering should be known as "The Doomed Discipline", doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter 'How to program if you cannot.'"

  69. You find someone you think is a good engineer by creative_Righter · · Score: 1

    and you mimic him/her. How do they act during meetings? How do they write tech-specs, documentation? Look at their check-ins, how do they approach code? How deep can they dive into a discussion? Then ask yourself how do you act during meetings, how does your writing stack up, how would you would have written that, where does your knowledge end? Repeat.

    There is something to be said about faking it until you make it. Great engineers (and I've seen several in my day) have found a way to balance--their time, customer requirements, dealing with management, and other engineers and combined it with deep knowledge. Little of what separates a decent engineer and a great one is know-how, though. What really separates them IMHO is their countenance when dealing with a massive, ambiguous problem, their delivery record and the trust that they've garnered from that, their effective use of time and their innate, almost magically ability to be aware of any trade-offs the team and organization may be making due to their deep understanding.

    If you aren't around good engineers you probably won't be one.

  70. en-gi-neer—n. by macshit · · Score: 1

    "Engineer": "Hacker" with enough scars.

    --
    We live, as we dream -- alone....
    1. Re:en-gi-neer—n. by Anonymous Coward · · Score: 0

      "Hacker": "Engineer" with nothing but scars.

  71. Re:Should of went to a tech school CS is not for w by Sir_Sri · · Score: 1

    I'm not sure you're entirely on base, but you've got the right idea.

    If OP wanted to take software engineering, he should have taken software engineering, not CS. They rely on much the same in basic skills but they are different things. A MSc in comp sci isn't supposed to be a programmer who's taken 10 extra courses. You're supposed to actually do, well, science. It is real work, it is the technical architect behind the system, the technical director who figures out what problems can be solved by the tech school staff, the person who develops a novel or efficient solution a problem quickly hacked together by someone who didn't really appreciate algorithm efficiency, that sort of thing. Being an IT guy is not CS. Being a professional scientist is about using a scientific process and knowledge kit to apply to a problem domain (computing in this case), so error and failure rates, efficient algorithm that sort of thing. Efficient algorithms and representations of data is a big area of CS since it sort of encompasses languages (is it easier or harder to efficiently implement an algorithm in a particular language, why?), the tradeoffs etc. You're an expert in what data is, and what you can do it, whereas a software engineer is an expert in how to use a computer to solve a problem with data. If you trained in one expect a period of retraining to do the other, they aren't mutually exclusive but the are separate and somewhat complimentary.

    I teach both SE and CS students. Because there is a LOT of overlap, and you can learn in CS SE skills, but the emphasis on the typically individual responsibility of a scientist vs the collective responsibility of an engineering project aren't the same. If you get a job it's up to them to teach you the area you are deficient in, SE's are usually good at designing a system and hacking it together to work, CS is there to make it efficient or to figure out how to solve a novel problem even if they aren't the one implementing it, or figure out what problem is even solvable (whereas the SE is concerned with whether or not the solution is implementable).

    I realize the US is casual with the use of language here. But if you're a scientist you're not an engineer. If you have an MA you aren't an engineer. If you have an MBA you aren't an engineer. You can become an engineer with training after the fact, but if you wanted to be an engineer you should have been an engineer.

    I wouldn't consider 'open source' as work in the same way as real work is. Volunteering to help build a house uses a lot of skills like being paid to build a house. But the 'on time, on budget, with the co-workers we choose for you, not the ones we want, on the hours we tell you' is a a different environment. If you can get an MSc in comp sci you don't need to 'work' experience of open source particularly (nor would you necessarily want to give the impression you're willing to work for free).

    And you see old code everywhere. Academia is full of it, because someone wrote code to solve a similar problem to this 10 years ago, and you're using it now and it's been 'maintained' by 5 other grad students who've all long since left, and you're stuck with it now. Industry is full of it 'because it works', and government is full of it because they can't get money to put in something new even if they want to, or they put money into a politicians pet project that had nothing to do with the requirements of the actual problem.

  72. Let me fix that by Anonymous Coward · · Score: 1

    Engineering a house:
    1. Gather requirements
    2. Write a spec
    2a. make a prototype because users can't vision the spec the way you can, try nailing planks together to understand problem better.
    2b. Did they like it? No? Go back to 1.
    3. Design house to new spec based on plank prototype feedback.
    4. Build house to design
    4a. Realize that you didn't fully capture the problem because this is designing something *new* after all, not a simple assembly of a standard house, more like designing a new type of house each time.
    4b. Get feedback, fix problems short-term by nailing planks together.
    4d. Go back to 1 for the next version, remember to take some planks with you, you'll need them, it's not a perfect world.

    1. Re:Let me fix that by scgops · · Score: 1

      I like your revisions.

  73. The difference between a hacker and an engineer: by Tastecicles · · Score: 0

    A hacker tackles problems because he wants to.

    An engineer tackles problems because he's been told to.

    Do you want to be someone who enjoys what he does, solves new problems by applying old solutions or variations thereof, then rewrites the manuals? Be a hacker.

    Or do you want to be someone who spends his entire working life reading manuals and doing what he's told? Be an engineer.

    --
    Operation Guillotine is in effect.
  74. antifoidulus, what exactly are you looking for? by Taco+Cowboy · · Score: 0

    The difference in between a hacker and an "engineer", for lack of a better word, is not "testing method", per se

    The difference is that a hacker hack because it's something the hacker WANTS TO DO

    The so-called "engineer" ? He or she does something because it puts food on the table

    Nothing to do with testing method

    Nothing to do with methodology what-so-ever

    I've been in this field for ages and I never identify myself as an "engineer" simply because I don't need to do something out of the need of putting food on the table

    --
    Muchas Gracias, Señor Edward Snowden !
    1. Re:antifoidulus, what exactly are you looking for? by geoffles · · Score: 2

      This seems a little unfair.

      I didn't spent years of my life studying "to put food on the table" - I studied and became an engineer because of my passion for technology. In other words, I love my Job and I love developing software.

      The "so called" engineer would actually know that methodology and testing not only doesn't have nothing to do with engineering, but instead knows that these are (some of many) tools with which to produce quality solutions.

    2. Re:antifoidulus, what exactly are you looking for? by Hognoxious · · Score: 1

      The difference is that a hacker hack because it's something the hacker WANTS TO DO

      The so-called "engineer" ? He or she does something because it puts food on the table

      There are plenty of people who are paid to do it that wouldn't be classified by any sane person as engineers, so that's pissed all over your invented distinction right there.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    3. Re:antifoidulus, what exactly are you looking for? by geekoid · · Score: 1

      You're an idiot. I pity the people that need to go around and clean up your crap.

      --
      The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    4. Re:antifoidulus, what exactly are you looking for? by Hodr · · Score: 1

      And I have always felt that when someone asks you what you do / what "are" you; it would be most correct to answer with what you get paid to do.

      If you have a degree in EE, but your job position is "Programming Team Lead", you are a programmer, or possibly even a manager, but not really an engineer.

      Conversely, if you never went to college but somehow manage to work your way into a full engineering position and you perform that work adequately, I would call you an engineer.

      Of course, take that attitude to the extreme and If someone pays you on the street to give medical advice, can I call you a doctor? I think the answer is yes, you may be the worlds shittiest doctor but someone believes in you enough to pay for your services.

    5. Re:antifoidulus, what exactly are you looking for? by FatAlb3rt · · Score: 1

      So I have my EMT-Basic, a course and certification that takes about 3 months to complete. I guess I'm a doctor, huh?

    6. Re:antifoidulus, what exactly are you looking for? by quacking+duck · · Score: 1

      Engineer and doctor are both protected terms in many places, and you cannot hold either title (i.e. on a business card) without accreditation from respective authorities. Misrepresenting yourself as an engineer won't get you more than a lawsuit and fine, but misrepresenting yourself as a doctor can get you jail time.

      In parts of Canada, Microsoft was forced to only refer to their certifications as "MCSE", never expanded to "Microsoft Certified Systems Engineer".

      There's similar attempts to protect the word "architect" although that's a more recent development.

    7. Re:antifoidulus, what exactly are you looking for? by Marxist+Hacker+42 · · Score: 1

      My god, having a kid turned me into an engineer!

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    8. Re:antifoidulus, what exactly are you looking for? by Marxist+Hacker+42 · · Score: 1

      Depends *HOW* you misrepresent yourself as an engineer- and how many people are killed when that bridge you designed falls into the gorge.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    9. Re:antifoidulus, what exactly are you looking for? by quacking+duck · · Score: 1

      Indeed... I noticed that omission right after I submitted the comment, and made sure something like that was mentioned that in my next comment.

  75. Engineering is sustainable problem solving by Sarusa · · Score: 2

    You've got three broad brush categories, though of course people are often some of each.

    - Programmers code stuff. Whatever you tell them to. Sometimes you can give them a problem and they come up with a solution, but it doesn't keep the entire ecosystem in mind. Often don't understand what they're really doing. Drives me batty when they're called Software Engineers.
    - Hackers solve problems using whatever means necessary, however ugly it is.
    - Engineers are solving problems keeping all the tradeoffs in mind and considering that this is a /product/, even if only an internal product.

    Here's an example: This week a customer asked me for a feature in some PC software that generates files for processing by the embedded system. I know the entire ecosystem, not just the PC part of it, so I was able to tell them it was doable, but would have these negative effects - I can get you something working in the short term with these negative side effects, but we can get rid of them in the long run if we do this and that. They thought it was more important just to have the feature in the short term to show off in the short term and would ask me to make the other changes later if the tradeoffs got onerous. Maybe they'll never need it. This was a good deal for them in terms of what was delivered for what they're paying for my time.

    You mention testing, but that's not really engineering per se, just one of the tools in the belt. A good programmer would (and should) be able to employ testing where necessary. In this case I did only cursory testing because they needed it /right now/ and the demo files I provided worked and were sufficient to show off the feature. And of course I told them this. Now that there's some breathing room I'll add better testing, and more if they decide to move forward on it.

    It's all about knowing your /entire/ system enough that you can weigh the risks and requirements properly. Sometimes we blow a risk assessment or the requirement is wrong or something else goes wrong (customers are often very bad at providing real requirements or information) but at least you started from an educated guess.

    You're a hacker, that's a good start since you're focused on solving the problem, and that's crucial - programmers are often (though certainly not all) bad at that. You are almost certainly more creative than some engineers. But now you need to consider that the requirements and the environment may substantially change how you choose to solve the problem. That thing you did may work, but is it maintainable and sustainable, and will it survive foreseeable new requirements?

    Another example: there's a place in one of our codebases where sometimes you're looking for a string in an array in user time (someone typed something). We don't bother to sort that. Who cares? It's 'instantaneous' for the user either way. Why waste the time and code and complexity sorting it? There's another case where we're constantly looking things up, on the order of 5x a millisecond, so that one is sorted. But not cached since 5x/msec isn't /that/ much of a hit in context

    I went a bit long, but I hope this makes sense. It's all mindset. Engineering is learning everything you can that even indirectly effects your system and solving problems based on ALL the tradeoffs. Realistically you can't know them all, but you can try. Iteration helps, as does time and budget.

  76. Untrue by piggydoggy · · Score: 1
    That's untrue and something that gives a bad impression of agile software development.

    To "code something up (using a lot of prints to debug)" means hacking, i.e. rigging software together with the emphasis of doing it as quickly as the intuition allows, at the expense of readability, reusability, reliability and ease of change.

    Agile software development, in a nutshell, means acknowledging the fact that noone can really know what true final requirements for the eventual finished product are, so the idea is to start small and simple with a small feature set and gradually evolve into what the customer really wanted in the way of iterations - but at all times keeping the code tested, clean, readable, reusable and version controlled. It's about always having working version of the software, whose expected functionality can be demonstrated and verified with automatic tests, while using them to constantly refactor the code to better and clearer. It's about keeping the cost of changing the software low, while on the other hand, the cost of changing quickly hacked-together applications increases exponentially with complexity.

  77. The difference between the two is by w0mprat · · Score: 1

    Income and paperwork.

    --
    After logging in slashdot still does not take you back to the page you were on. It's been that way for 20 years.
  78. Yes that's it. by mbkennel · · Score: 1

    The most important difference between 'hacking' and engineering is understanding time, and understanding humans (epsecially yourself).

    In a nutshell:

    0) learn the difference between 'clever' and 'smart', and then 'smart' and 'wise'.

    1) code is to your employer as mass is to an aircraft engineer: less is better.

    2) understand how and when to say "no" to your management, or more realistically "how long" and "what it takes" and don't overestimate your total productivity in delivering product as opposed to a caffeine-fueled hacking.

    1. Re:Yes that's it. by Sarusa · · Score: 1

      I never explicitly called out time as one of the crucial engineering constraints - thank you for doing so.

      It's too important to gloss over because as far as I'm concerned it's the #2 constraint after basic physics. With enough time my team could do (almost) anything, and in addition to market timing concerns, engineering time is almost directly equivalent to money.

      And of course understanding humans is very useful in negotiating with your clients, internal and external.

  79. Sadly, you'll fit in perfectly by Opportunist · · Score: 1

    Don't sweat it. You'll be doing fine. It's commendable that you want to be better but yes, the "piece it together and keep compiling and building 'til it does kinda what it's supposed to do" is pretty much the approach (too) many programmers have to a problem. It's not your problem. It's an industry problem.

    One thing university hardly prepares you for is the reality of programming. You won't start fresh with a project, at least your chances to do that are slim to nil. You will most likely be hired in the middle of a project, or at the very least you'll have to deal with existing code that somehow affects whatever you'll be writing, code that grew with time, was patched, fixed and altered a hundred times and looks it. Meaning, it will be a mix of various coding styles, parts that nobody really knows anymore what they do or how they do it (because whoever wrote and maintained it is no longer with the company), with hardly documented features and even less documented side effects.

    This is what you'll encounter in your job. In other words, the "hacker" approach is most likely exactly what will allow you to survive in there. It's the unfortunate reality that code is more often than not in a rather bad shape and few people are "true programmers". Hell, you have a CS degree? Congrats, chances are you're already miles closer to being a programmer than most people working there...

    --
    We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
  80. Understand the problem. by taj · · Score: 1

    Tight algorithms are nice to have for most of the people actually using software. Engineering is an applied science. Engineers solve real problems which means clearly identifying the potential for their investment.

    Identify who is going to use the software. Who is this person? Put together a profile on a couple sheets of paper. Have a face for this person. There may be a few personas that will use the software.

    Given these personas. How do they accomplish the task you intend to improve today? What is painful in their current workflow? A possible answer is they can't do it.

    Given these pain points. Create a list of pain points you can address. When you can say how these will be addressed, they become a functional specification. Part of the functional specification may include performance related concerns if it is driven by the persona.

    Given a functional specification, you will need some architectural design to make the implementation possible, document that.

    Now you have enough to say how you will test it; some will be unit tests and some will be operational. As you document the testing, you may find your functional specification needs to be more precise.

    From there, use what you already know. Improve upon how you implement as time permits but keep the larger picture in mind.

    Ideally you will have others review your documentation and code before letting it out the door.

    When you are done, everything goes back to the original persona with pain points you are improving. If the tests are passing and the end user is not satisfied, you missed a requirement in your functional specification.

  81. Testing is easy by Anonymous Coward · · Score: 0

    There are 3 dominating schools of testing, and then something in between.

    The Microsoft way is to let users do the testing, it is considered the most cost effective. Throw out some early release versions, then it is peoples own fault when they lose data.

    The Apple way is to let the CEO do the testing. This has the side effect of everybody down the food chain tries to make things work better than good enough.

    Outsource the testing. This is difficult, as you will have to specify what cases to test for. In Denmark a company has great success in using people with autism / aspergers to do the repetitive testing tasks. They are way better than most other people you can get, who will get tired from testing after 5 repetitions if they have much brain.

  82. It would help... by Fubari · · Score: 2

    So it would help to know what your new job is. Blue-sky research? Existing install base (aka maintenance)? New product development?
    How about target space: mobile? embedded? cloudy? big data?
    (Tool sets & technology stacks don't matter so much, you'll find those are the easiest part to wrap your head around.)
    In any event, congratulations & good luck!

  83. Re:The difference between a hacker and an engineer by forkfail · · Score: 1

    I pride myself on being an engineer. And I absolutely love my work.

    I coded professionally for years before I got my degree. But it took time, and a certain amount of formal training, to truly mature into an engineer.

    These days, I play with some pretty big toys. And there most certainly is a part of me that's still a hacker. But that part is very much directed and disciplined by the engineer part of me.

    As a result, I still get the joy of building things - at the code level, and at the architect level. The discipline allows me to build great things, not just toy projects, which is all that the undirected, undisciplined hacker will ever build.

    Because I'm willing to learn (to read those manuals, and pay my dues), I've worked on everything from embedded to massive distributed systems.

    Being an engineer and a hacker don't have to be mutually exclusive. Perhaps not all engineers have the drive and passion to be a hacker; perhaps not all hackers have what it takes to acquire the discipline of being an engineer. But those who can be both get to play with the biggest toys, get to work on the neatest problems, and, honestly, make the most money at the end of the day.

    --
    Check your premises.
  84. What is an "Engineer" in the real world? by Taco+Cowboy · · Score: 1

    An "engineer" is somebody who takes the time to understand a problem, and creates something to solve that.

    In an ideal world, you bet, the above is true.

    But we live in the real world, and in THIS real world that we live in, there are simply too many people who call themselves "engineer" who never take any time to understand any problem

    The many years I've lived in this real world tells me that I don't want to be known as an "Engineer" even when I am more qualified than 99.99% of those so-called "engineers" out there

    --
    Muchas Gracias, Señor Edward Snowden !
    1. Re:What is an "Engineer" in the real world? by gl4ss · · Score: 1, Insightful

      engineers make shit happen, like blowing up a castle by building siege engines. scientists try to explain why it would work afterwards.

      --
      world was created 5 seconds before this post as it is.
    2. Re:What is an "Engineer" in the real world? by Aighearach · · Score: 1

      But we live in the real world, and in this real world that we live in there are simply too many people who call themselves commentators who never take any time to understand any problem.

      The many years I've lived in this real world tells me that I don't want to be known as a Commentator even when I am more qualified than 99.99% of those so-called Commentators out there.

    3. Re:What is an "Engineer" in the real world? by marnues · · Score: 1

      Naw, we're more focused than inventors. But we will make that siege engine the best it can be!

  85. more than coding by kwikrick · · Score: 1

    Software engineering is more than just coding and testing. It about getting exact requirements from the client; documentation and boring paperwork (always more paperwork!), collaboration, time management...

    You could say software engineering is coding with the fun taken out of it. My advice: try to get a in house job in a tech firm, where the 'client' are technical people who know what they need, and to whom interesting problems and clever algorithms matter. That way you'll spend more time coding and less time on paperwork and moving buttons in a user interface.

    --
    assignment != equality != identity
  86. MSCE et al by dbIII · · Score: 3, Interesting

    Go with it, just like the guys that call themselves Architects, Gurus, Batman or whatever, just don't try to pretend like some of the others above that it makes you equivalent to a professional engineer.
    I'm not an engineer. I used to be an engineer. I've worked in power stations, oil refineries, offices etc and helped educate engineering students at a university and been a member of IEAust and ASTM. However, due to a lack of jobs a bit over a decade ago and a career change now that I run the computer systems for a company and write a bit of code every now and again I'm not an engineer anymore. You can call yourself whatever you like and are perfectly justifed to use the title given to you but don't expect everyone to take it seriously, especially since professional engineers have a code of ethics that you do not have to stick to.

    1. Re:MSCE et al by Nursie · · Score: 1

      "just don't try to pretend like some of the others above that it makes you equivalent to a professional engineer."

      Tell me how it's not equivalent.

      The I haven't signed a code of ethics does not mean I do not adhere to one (or agree to something very, very similar every year, it's called business conduct). That I don't have the certification/accreditation is down to the IEEE dithering for decades on the subject.

    2. Re:MSCE et al by Nursie · · Score: 1

      And wow, did you think I was claiming that an MCSE made me an engineer?

      LOL. I was going more along the lines of ten years of designing and writing stable, mission-critical server systems.

    3. Re:MSCE et al by Anonymous Coward · · Score: 0

      Uh, you seem to think that professional engineer ethics is some kind of gentleman's agreement.
      If you violate engineer ethics in your capacity as professional engineer, you go to prison.

    4. Re:MSCE et al by Nursie · · Score: 1

      Most of the stuff in the code is illegal to transgress whoever you are, the rest is ill defined and fluffy, and along the lines of being a decent human being.

      For instance I doubt many people go to prison over this one -

      Engineers shall continue their professional development throughout their careers, and shall provide opportunities for the professional development of those engineers under their supervision.

      If they fail to train underlings, yet I'm pretty sure this one -

      Engineers shall act in such a manner as to uphold and enhance the honor, integrity, and dignity of the engineering profession and shall act with zero-tolerance for bribery, fraud, and corruption

      Is a matter of law anyway.

    5. Re:MSCE et al by cmat · · Score: 3, Informative

      This may be true in other parts of the world, but where I live in the province of Quebec, Canada, you CANNOT give yourself/use the title of engineer unless you are part of the Order of Engineers of Quebec. Other place may have similar laws.

      --
      -- Humans, because the hardware IS the software.
    6. Re:MSCE et al by Anonymous Coward · · Score: 0

      Examine CS curriculum and compare it to engineering curriculum. Done and Done.

    7. Re:MSCE et al by tomboalogo · · Score: 1

      All of Canada

    8. Re:MSCE et al by Anonymous Coward · · Score: 0

      In the U.S. the term engineer is thrown around a lot. At universities it's possible to get an engineering degree and do engineering work, however public works projects and buildings need to be approved by a licensed engineer. Also, only a licensed engineer can use the word engineer in a company name.

    9. Re:MSCE et al by pnewhook · · Score: 1

      I was going more along the lines of ten years of designing and writing stable, mission-critical server systems.

      So if you happened to be practicing medicine without a degree or training for 10 years, do you think that gives you the right to be called a doctor?

      --
      Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
    10. Re:MSCE et al by Aighearach · · Score: 1

      In Oregon the formalization of the title Engineer only exists on specific types of government regulated activities such as building structures or public works. In the case of both computer software and hardware engineering, it is not a formal title at all but a job role. You will find actual humans in actual software engineering jobs that come from a wide variety of academic backgrounds.

      Ultimately the only difference between a Software Engineer and a Project Manager is that the engineer can sit down with non-technical executives and help them decide what sort of thing to build, how to build it, and how much resources to assign to it. And then tell the Project Manager what to build, supervise the construction, etc. Perhaps they are also doing a Big Design Up Front, or perhaps not.

      And a hardware engineer is anybody who can do the job. You'll find people designing boards and writing firmware who worked their way up to engineer via CNC programmer.

    11. Re:MSCE et al by marnues · · Score: 1

      Zero-tolerance for bribery, fraud, and corruption? Certainly that's not the law. Catch it when you see it is the law. Zero-tolerance implies so much more than that.

    12. Re:MSCE et al by marnues · · Score: 1

      Have people been calling this fictitious person a doctor for 10 years?

    13. Re:MSCE et al by Anonymous Coward · · Score: 0

      What if the woman I'm dating at the moment keeps calling me a "Technician"? Is that 50% an engineer? According to Red Hat, I have to be a Certified Technician before I can become a Certified Engineer. Bring it on!... gawd I need some sleep.

    14. Re:MSCE et al by pnewhook · · Score: 1

      Irrelevant. You either are a doctor and can legitimately be called one or you are a fraud. Same goes for engineer. Now is it possible for an untrained person to have the skillset of a doctor or an engineer? A long shot but possible yes. But that's not the issue.

      --
      Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
  87. Idealizing engineering by djchristensen · · Score: 1

    Your view of what a SW engineer does is sadly overly idealized. I've been at the profession for 20+ years and have at best only sporadically glimpsed the world you describe. I wish that there was more actual methodical engineering involved, but most projects very quickly jump to the "we just need to get sh*t done" mode. The skills you describe somewhat negatively as "hacking" would serve you quite well in many or maybe even most shops.

    1. Re:Idealizing engineering by mbkennel · · Score: 1

      An engineer also tries very hard to mitigate (and document/CHA) the problems when faced with the inevitable WGNTGSD *now* projects.

  88. Business architecture by Anonymous Coward · · Score: 0

    The mythical man month is definitely the one to look at.
    The most important message: there is no silver bullet.
    Why? because you cannot reduce the essential problem, you can only improve on the accidental.
    Therefore, know how to design and manage the essence of your problem.
    Don't start to think in technical terms, start with a business architecture (not only for development time, but maintenance),
    then look into practical technological solutions, then code.

  89. No idea about commercial practices by Anonymous Coward · · Score: 0

    In a private sector organisation, commercial pressures will probably dictate working practices to some extent, and constantly changing requirements (of lack of requirements) are likely to be the biggest annoyance.
    You will probably not get away with 'hacking' stuff, if your organisation has any level of competence. If you want to do this, go somewhere which is run be idiots, and staffed by idiots. There are plenty of such places.
    Most organisations that develop software professionally will have code reviews, design meetings, and formal testing systems. As a junior developer, you will be expected to follow the processes that are in place, and as a result, should pick these things up, fairly quickly.
    Big software projects require competent up-front architecting. I have worked on various pieces of software that were not designed properly, and they usually just become completely unmaintainable, and require re-writing (at least in parts). This is usually a good opportunity to modularise. The biggest skill is to learn how to manage the people who manage you, so that they don't impose decisions that compromise quality and design in the long run, and eventually make further development and maintenance impossible, leading to an outflux of all of the competent developers, and eventual death of the project, or complete re-write.
    Architecting large pieces of software is very little about sketching individual algorithms, and much more about deciding how to fit all the pieces together in an extensible and maintainable way.

  90. I'm still a hacker by Nitewing98 · · Score: 1

    I'm still a "hacker" 25 years after getting my first computer, studying data processing and computer science, and writing and maintaining software. I never cared for the term "software engineer." Back when I started, "hacker" wasn't a bad word. A good "hack" meant a great prank, or a really cool or elegant solution to a difficult programming problem. It was also used by hardware folks, since most of us could take our computers apart and put them back together ourselves.

    Professionally I have always used the word "programmer.". People in IT and management both respect the word, and you don't sound like you are trying to make yourself some titled position, like "sanitation engineer" instead of "garbage man."

    --

    Nitewing '98

    Everything works...in theory.

  91. Engineer=Hacker+Testing+Project Management by Anonymous Coward · · Score: 0

    Learn to test. Learn to manage projects. Those can be taught. Hacking can't, and if you've got that, you will eventually be the trifecta.

  92. Engineer to Hacker: You backwards by Anonymous Coward · · Score: 0

    You go from engineer to hacker, not the other way around. Engineers are like hackers stuck inside the matrix

  93. Reread your first year notes by paylett · · Score: 1
    Actually do all of the things that they teach you to do, but you could never be bothered with:
    • - write meaningful comments
    • - write precondition checks
    • - write unit tests
    • - write documentation, and lots of it
    • - don't just think about how your code works, but also at how it fails
    --

    Believing something doesn't make it true. Not believing something doesn't make it false.

    1. Re:Reread your first year notes by BenJaminus · · Score: 1

      parent needs to be modded up big time. It answers it from my point of view.

      I'd add the following tho :
                      - always think ahead to how the software may be changed in future (to make it easy on yourself when the specification changes)
                      - always understand how much work the computer is having to do (ie don't write in-efficient code or the server WILL lock-up)

  94. Ignore the idiots by Anonymous Coward · · Score: 0

    Lesson one: Don't pay any attention to the idiots who are incapable of moving beyond a strict definition of engineer.

  95. Learn to debug by Zenin · · Score: 1

    CS teaches you how to build something that works correctly. CS doesn't have much to say when things don't work as expected.

    If you can't debug, really, really well, then you can't be an engineer. That your own programs won't work right (and you can't fix them) is only part of it; Debugging causes you to learn what does or does not work in the real world, ivory tower CS solution be dammed. With that knowledge and understanding, you'll better engineer your next program taking that into account.

    --
    My /. uid is better then your /. uid
  96. Engineering is the application of science by afgam28 · · Score: 1

    ...not the use of the waterfall model.

    This is *not* controversial! Look up the term "engineering" in a dictionary or Wikipedia if you don't believe me.

    For some reason, a lot of people have the mindset that engineers have to do everything as per the waterfall model, and that software engineering is all about process, methodology and code maintainability. This sort of thinking is really just cargo cult engineering.

    Other branches of engineering often do things in a waterfall-like process. For example, a bridge has to be designed before it can be constructed; you can't build a bridge incrementally, and construction takes a long time. But there's no such requirement for software. Software can be developed incrementally, and compilation is very quick compared to construction/manufacturing.

    There are other engineering fields where things are engineered incrementally. As an example, take a look at how an F1 car evolves over a season. You'd have to be crazy to claim that the people who design F1 cars are not automotive engineers because they don't do waterfall.

    What separates software engineers from hackers is that software engineers analyze the systems they work on, using computer science and mathematics. They reason about performance and computational complexity, they reason statistically about reliability and fault-tolerance, or they use mathematical models of real-time systems to schedule real-time tasks.

    They don't spend all of their time writing documents and talking about maintainability.

    Documentation, maintainability and process are all important things, but they're not the defining traits of an engineer. What makes an engineer an engineer is their application of science to solve a problem.

    If you want to make the transition from a hacker to an engineer, learn the maths and computer science that underpins the software that you'll be working on. Not all software needs to be engineered; a lot of internal corporate web apps don't need to be engineered, but sites like Amazon, Facebook and Google do. A lot of real-time and embedded software needs to be developed by software engineers too. If you want to be a software engineer, make sure you go to work at an engineering firm.

    Or don't. There's nothing wrong with being a hacker. Just make sure you don't become a cargo cult engineer.

  97. transitioning from "faggot" to "douchebag" by Anonymous Coward · · Score: 0

    get a clue fucktard

  98. Craftmanship by Anonymous Coward · · Score: 0

    I find your understanding of the term 'hacker' somewhat ironic.
    The historic origins of the term are in conflict between the alternate definitions of:
    someone who attacks systems attempting to intrude or damage them, vs.
    someone who authors carefully written, precise code that effectively and efficiently satisfies a need.

    From your own description, I would term you an inexperienced "code slinger" - or someone who throws things against the wall hoping something will stick.

    You're be best advised to consider what it will take, over the many years of your (future) career, to be considered a 'craftsman'.
    From there, I think that your question transforms into: "What is craftsmanship in the context of software development?", and
    "How does one develop into a craftsman?" - what skills, practices, and qualities are required?

    First and foremost I find it is "attention to detail" - which is more an attitude than anything else. Passion also comes to mind.
    Read things like "Good to Great" by Jim Collins; learn how to "be the job"; continually ask: "Is this that is needed?" and "Are the users happy?".

  99. It's really quite simple by Plammox · · Score: 1

    1. Understand the users and businesses who are going to use your product, and what they need from you to be successful. (And create a minimum no. of support requests later on). Spend actaul time doing it. No, really!
    2. Understand that testing is needed to uncover all flaws in your program. Learn to appreciate the good testers, who do anything to break your code. Again, it will help minimize the shit storm, when you release (flawed) code to production.
    3. *Then*, you can start honing your hacker skills, selecting the algorithm that will squeeze out the last 2% real world speed increase.

    The most successful engineers I have met as a project mgr/product owner master the 3 above.

  100. Version Control, Unit Test, Continuous Integration by Anonymous Coward · · Score: 0

    As an Electrical Engineer who went software, the one thing that must be noted is that the V model for development is great for electrical and electronic development where spinning prototypes is a lengthy process and then testing, redesign etc are lengthly loops. But companies that adopt this approach for software are crippling themselves.
    Shorten the testing loop. Make your methods smaller and single purpose, and document them with doxygen style comments so you can generate out nice "detailed design" later from your souce. Work within any one of the *Unit Frameworks JUnit, CppUnit, NUnit, etc.
    For gods sake use automated build an CI to perform full automatic regression testing.
    There are a million and 1 free tools out there to help you be more efficient as a "Engineer" as opposed to a hacker. But really the only difference between a "Hacker" and an engineer is keeping documented evidence of your hacking and providing proof of testing.

  101. Easy: read the list by dbIII · · Score: 2

    Tell me how it's not equivalent

    Don't take it from me, look up the website for any professional engineering body and see what the requirements are to join.

    or agree to something very, very similar every year, it's called business conduct

    Nice little joke but I'm trying to be serious here.

    IEEE dithering for decades on the subject

    Fair enough, but "I could have been a contender" does not equal champion even if the rules are skewed to unfairly keep you out of the ring.

    1. Re:Easy: read the list by Nursie · · Score: 1

      "Don't take it from me, look up the website for any professional engineering body and see what the requirements are to join."

      Sure, have done, would be joined now if there was a way as the criteria are not that onerous.

      "Nice little joke but I'm trying to be serious here."

      Then I'll say what I said to the other guy - the engineering ethics code is pretty much just promising not to do things that are already against the law, and to be nice on top. Not all that meaningful.

      Fair enough, but "I could have been a contender" does not equal champion even if the rules are skewed to unfairly keep you out of the ring.

      If you think that's what I'm trying to say then you haven't been listening.

    2. Re:Easy: read the list by dbIII · · Score: 1

      Then I'll say what I said to the other guy - the engineering ethics code is pretty much just promising not to do things that are already against the law, and to be nice on top. Not all that meaningful.

      If that's your interpretation then there's the ethical difference between you and an engineer right there :(

      If you think that's what I'm trying to say then you haven't been listening.

      I'm listening all right but I'm hearing incorrect preconceptions as far as I can see. It appears we are talking two completely different languages or a fuzzy sort of definition you think you can make up on the spot.
      Recognition of peers versus some guy who thinks he's hot shit. I know which horse I'm backing.

  102. Programming is NOT engineering by Anonymous Coward · · Score: 0

    If you want to transition to being an engineer, you're going to have to go back to school for engineering.

    Software "engineering" is programming. It's not engineering. You cannot be a licensed Professional Engineer in software.

  103. Cowboys... by Quazion · · Score: 1

    Being a good hacker is fine, but acting like a cowboy (someone who is reckless or irresponsible) when putting code in to production isn't.

    Creating quick and dirty solutions can give you great insights, implementing them that way in production environments will bite you in the ass later on.

  104. The difference between a hacker and an engineer by Webz · · Score: 1

    A hacker gets things done. An engineer enumerates the pros and cons of various solutions and picks one.

    The work you do will rarely be complicated or sexy, in the CS/theoretical sense. But it will be put up against a lot of non-technical forces like time, budget, politics, etc. Being an engineer is about navigating this imperfect space. A hacker will come up with one solution, but an engineer will come up with many.

    You're multiplying the solution space by a certain amount of non-technical dimensions and accounting for the difference. That ability will come in time. You will find out that technical correctness isn't always the #1 priority.

  105. You're all set for a career, man by vikingpower · · Score: 1

    I take a problem, sketch together a rough solution using the appropriate CS algorithms, and then code something up (using a lot of prints to debug). I do some basic testing and then go with it

    That is exactly how we, "engineers", often do it.

    How do you get out of the 'hacker' mindset?

    You don't. The "hacker mindset" is precious. Never lose it. Illustration: not earlier than yesterday I presented a Proof of Concept to a client. The guys were thrilled. Basically, all I had done was hacking an IBM tool, to make it do something it does, out-of-the-box, badly. Don't change, dude !

    --
    Religous speak to God. Insane are spoken to by God. When all shut up, one can finally hear Shostakovich in peace
  106. University education by calv · · Score: 1

    Actually, university education is very detached from working in the real world. Most teachers want to make a researcher out of you, not an engineer.

    After your graduation you need at least six months or a year of real life work to learn to put the education to real use. You should be happy that you alread are a talented hacker, so you can be productive from the start.

    With the time you will recognize problems coming up in your day to day job, that you learned about in university.

  107. OK, just look at the et al not MSCE by dbIII · · Score: 2

    And wow, did you think I was claiming that an MCSE made me an engineer?

    Of course not since I know nothing about you and it's a conversation not a silly personal attack. I put it in the title because that's just another bunch of people using the title that somebody else (Microsoft) gave to them. It's an extreme that everybody knows even if it's not as bad as it used to be, just like the guys that run cables that get called "engineers" by their employers and then that title gets shoved down the throat of customers.
    As I said above, my opinion is to go with it, just don't expect everyone to take it any more seriously than "Guru" and don't get suprised when people occasionally look down on you for adopting a title they think you don't deserve. Most of the time that's their problem. It's my problem when somebody at an simple course certificate level and no experience uses it as a bluff and pretend some sort of ability they do not have. That pisses me off so much that I react every time the "why can't I call myself an engineer" question comes up even if somebody is a the point where they are effectively working as one anyway.
    Anyway, IMHO it's a matter of convincing a professional body of people with that title that you deserve the title (eg. real Architects have to jump through a lot of hoops before they are recognised as such), otherwise it's as meaningless as calling yourself Emperor.

  108. Becoming an engineer by prefec2 · · Score: 1

    There are different ways to become an engineer. First, the hard way. You code somthing up and then you aren't able to maintain it sufficiently. In the end you have to rewrite. When you do that cycle often enough or have seen rotten code of others often enough, then you should normally be able to make the transition. The first thing you can focus on at that point are methods and procedures. All that shit that hackers call a limit to their freedom. Today agile approaches are very popular, but they require a lot of discipline and they are merely improved old methods. The old method to learn is V-model or RUP or even the old "requirements -> design -> detailed design -> code"-method. For agile methods you have to learn that you have to iterate these processes and that you always start with a requirement cutting it into pieces called features and then add something to you design.

    Second, you could have it easy and start reading and implementing engineering methods in your job. In this version you just believe that it hurts not to do so, which leads normally to less motivation.

    But the main lesson is, learn and use the methods of software engineering. With time you will learn to use them wisely. And yes you should have heard software engineering classes in grad school, but you can still learn all that stuff. The big picture is not too complicated. Complicated things arise on the road.

    1. Re:Becoming an engineer by gl4ss · · Score: 2

      http://www.joelonsoftware.com/articles/fog0000000069.html

      '"requirements -> design -> detailed design -> code" waterfall fails hard when at the code level you notice the requirements can't be met with the api's available. that's why at the requirements stage you should test that you can actually fulfill what you're promising to do. now a true agile design end result is that the test if it can be done ends up as the production version....

      --
      world was created 5 seconds before this post as it is.
    2. Re:Becoming an engineer by prefec2 · · Score: 1

      I agree. However, the sketched "process" is hardly complete. And I would not recommend it. Even though it is better than on process at all. Things I left out: Evaluate technologies so they can match the "high level goals". This can be done with prototyping, reading etc.

      Also you should look into test driven development, model driven development, etc. The important thing here was the question "How to become an engineer?" And the short answer is: Use engineering methods to guid your creativity.

      BTW We used the watefall model in a under grad project. It worked well, but the requirements were fix and pre tested by our lecturers so there were no suprises. In a grad student project we used RUP including prototyping/tech evaluation, and we had to determine the requirements ourselves. It worked well, but only because we could throw away the prototypes and nobody was pushing us to reduce cost.

      In the real world things are a little different. You do not know all requirements and they change constantly (in most cases slowly, but constantly). You have to cooperate with people in other companies and they might not be available for the project full time, so you have to do a lot of time management, which makes things more complicated than knowing half a year in advance how the time budget looks like. A yes and in the real world there are developers which are not really good at coding and which are not really good at documenting or designing, but you cannot fire them, as there are no replacements available. At least that's how it is in Germany.

  109. Prove it by Anonymous Coward · · Score: 0

    That's the difference. A hacker and and an engineer can both write most programs.

    An engineer can prove it is stable, reliable, maintainable, refactorable, and transferable to other programmers.

    Getting there is what separates new programmers from old ones and hackers from engineers.

  110. Well put! Mod parent up! by olau · · Score: 1

    For some reason, a lot of people have the mindset that engineers have to do everything as per the waterfall model, and that software engineering is all about process, methodology and code maintainability.

    I think this is because the traditional methodology (or should I say Methodology) cult has branded itself that way for a very long time. I had a CS course on software engineering with a 800+ page "software engineering" book full of intricate ways of producing tonnes of almost completely useless documents and very little real-world advice on how to actually design and develop software and manage a software project.

    What separates software engineers from hackers is that software engineers analyze the systems they work on, using computer science and mathematics.

    And thinking critically about new ideas and their application. There are lots of fads and architecture astronauts in software development.

  111. Re:!Engineer by Anonymous Coward · · Score: 0

    That's correct. "Programmer" is the right designation. An engineer creates a technical solution to a physical problem which will work without failure after deployment. A programmer creates a logical solution to an information problem which due to complexity will have errors, and is therefore an ongoing job, like a service. And no, machine maintenance IS NOT comparable to bug fixing; a machine with a bug does not work and has to be recalled.

  112. is this like by Anonymous Coward · · Score: 0

    going from housewife blogger to journalist?

  113. What is an engineer? by Anonymous Coward · · Score: 0

    It is good to see this discussion. Long ago (in my early career) I asked the developers gathered for our particular task these question: what is a software engineer? How is an engineer different than a programmer? Nobody had an answer that I liked. So start with basics: what is the diff between engineer and construction worker? In construction engineering, an engineer designs a thing to do more than fit its purpose, but the design has to be "safe". Safety is the primary goal of the engineer. An engineer builds safe bridges, buildings and the like. And so it is with software. An engineer builds safe software. Software Engineers can hack prototypes together, and obviously do programming to implement a design, but they ensure the design is both testable well tested. Software Engineers love the opportunity to have other developers review their designs and their code, because it helps find defects.

  114. Write code. by jcr · · Score: 1

    Write it, fix it, learn what you did wrong, lather, rinse, repeat. It's how ALL of us gain proficiency.

    -jcr

    --
    The only title of honor that a tyrant can grant is "Enemy of the State."
  115. No difference by trout007 · · Score: 1

    I'm not sure if masters level is any different but the undergraduate program I was in there was only a 2 elective difference between CS and SE. I took all the electives for fun. When I graduated they asked did I want to have CS or SE on my degree. I said why not both. They said I only paid for one degree. I still don't remember which one I am.

    --
    I love Jesus, except for his foreign policy.
    1. Re:No difference by pnewhook · · Score: 1

      In my undergrad, there was only about 4 courses that were the same in the Cs and CompEng programs. And the CS people tended to do incredibly poorly in them as they lacked the background courses.

      --
      Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
  116. I've been more or less in the same boat by Anonymous Coward · · Score: 0

    I work in the embedded field (+10 years), and while most of my work has been with C, switching to OOA, OOD, (C++) has been a huge eye opener. I had been using TDD in C, but there was much much more to learn.

    I consider myself to be still on the learning path, but I believe I've advanced a great deal with the following:

    1. You need a good metor (I've seen others mention the same)
    2. The following books helped me:
    - Code Complete 2
    - Clean code (IMO these complement each other)
    3. Have a look at these online resources:
    - object mentor (I found the craftsman articles both entertaining and informative).
    - Some design patterns

    Good luck

  117. Professionalism and communication by sco08y · · Score: 1

    Those are two major factors I haven't seen while skimming comments.

    Most of your communication is done through keeping in touch with your peers. Talk to them, understand what they're doing, etc. But also long term, document your code as you go, either with written documentation or, better, with tests. Especially, learn what they're doing right, and tell them; people need recognition from their peers.

    Professionalism is pretty easy: learn how to use version control and continuous integration, e.g. Jenkins. Use CI, especially, to make sure that you fix your bugs right away. If you set it up and use it rigorously, you'll find you can put out some very high quality code, even though it will be at a slower pace than you're used to. But for large projects, fixing bugs "later" is madness.

  118. engineering IS hacking, but in art form by sl4shd0rk · · Score: 1

    the really productive and happy software engineer is the one who can hack something together, or be meticulous and pedantic, when the job calls for it. the key is knowing which approach is the best route for the project. there can be elegance, simplicity and organization in both.

    --
    Join the Slashcott! Feb 10 thru Feb 17!
  119. It's all about prospective by Anonymous Coward · · Score: 0

    - Be organized
    - Document, Document, Document
    - Write code assuming it will have to be changed in the future
    - Write code assuming someone else will maintain it
    - Write code assuming anyone anywhere with any level of skill will consume it

    Your best bet for preparing is to get involved in a good open source project. Find one that interests you, but make sure it has a well organized ticketing system (using Trac or something similar) and good peer code review. The right project will quickly break you of bad habits.

  120. Re: Engineering by rwa2 · · Score: 4, Interesting

    Yep, with most of the big engineering firms I've worked for, it's maybe 5% hacking and 95% documentation and packaging. If you can enjoy doing mostly the latter (finishing the last 10% of a project that ends up taking 90% of the time), then you should be able to get along fine. If you spend all of your time doing the former, then you will quickly become reviled by your co-workers :-P

    Here's the junk that seemed important to engineering companies:

    • ISO9001 : Is your shit documented? Do you know where the most current version of that documentation is? Most of the companies skirted the requirement by creating an unironically named "Desktop Instruction" linked from a desktop icon to a version-controlled file that basically said: "1. find problems 2. fix problems 3. document fix". BTW, you fail if you don't have a footer that says "Uncontrolled if printed" (but CS geeks never print anything anyway). And bonus if you can draw every process and procedure in flowchart form, which is actually a little bit fun :-P
    • CMMI : Is your shit version controlled? Can you rebuild an exact copy of something (and its documentation) that you delivered a month or a year ago? If you use version control tools, I think that automatically gets you to CMMI level 2, and if you use automated build tools in a version-controlled build environment, then you have most of CMMI level 4. I'm afraid that puts you well ahead of most project engineering teams.
    • Six Sigma (or some other Quality Management System) : Does your shit break? Your shit really shouldn't break, but if it does you ought to have some way to fix it so it doesn't break the same way again later. This might be the hardest thing to get down pat, but fortunately it's considered a "bonus" and not required by most projects. If you use a trouble ticket system, and the shit you fix stays fixed, then you're probably in good shape.

    So, in summary, if you can find your way around some sort of toolchain that involves doxygen, mercurial, make/ant, cobbler, jenkins, and redmine, to the point that you can hand a junior engineering a piece of paper (oops, I meant email a link to a desktop instruction) such that the junior engineer can build their own working copy of the product by themselves with nothing but cold iron and a revision tag, then you're doing well.

    But really, the real trick is to figure out how to get everyone on the project team to use the same toolchain :-P

  121. Expand your problem definition... by Lazy+Jones · · Score: 1
    ... to include:
    • Performance targets
    • Code readability / maintainability (for other people too)
    • Deadlines
    • Cost (yes, $$$ including long-term maintenance and even cost of your own time)

    All the other things, like whether to use a revision control system, an IDE, particular technology etc. are constraints provided by your environment or chosen based on intermediate results of your "research".

    --
    "I love my job, but I hate talking to people like you" (Freddie Mercury)
  122. Hacker is not someone who does dirty hacks by Anonymous Coward · · Score: 0

    You just described yourself as a boy who makes dirty hacks, not an hacker in its (obvious) positive meaning. You'd hurry to become an engineer, then, at least you will upgrade your poor status. Then, if you're a good one and will keep hard studying/practicing/working, you may become the hacker you say.

  123. Forget Code Complete. Watch Norm Abram by Anonymous Coward · · Score: 0

    Turn on New Yankee Workshop and watch Norm. He doesn't bang together a dresser, table, chair, or hutch. He carefully analyzes the inspiration for a piece, designs his piece with modifications (often including changes that make the piece easier to produce or more durable), and spends a good deal of time crafting jigs and other infrastructure that help him construct the piece. Part of the secret is that he crafts the jigs and other helper bits with as much care as he crafts the actual working piece.

    Translate that to code. Start with a firm set of requirements and a design for what you want to build. Check it out from all angles. Then construct your infrastructure -- build environment, test environment, tests (if you don't spend at least as much time thinking about your tests as about your deliverable, you may want to reconsider what you are doing), etc. THEN construct your deliverable. Take pride in your work. When you cut corners, know exactly what the cost will be and what the benefit will be, so that you know why and when to do it (or not do it) again (Norm doesn't pay as much attention to the finish on the underside of a table as he does to the top).

    To employ an unfair generalization, hackers concentrate on The Thing, while engineers concentrate on the process of making The Thing. A hacker improves code, and an engineer improves the coding process. A hacker thrives on making every experience a new adventure, starting with a clean slate. An engineer thrives on relating every experience to past experiences, trying to leverage knowledge and infrastructure (it doesn't always work, and it can be confining, but it provides a methodology for deciding when to wipe the slate clean).

  124. Discipline by Assmasher · · Score: 2

    First and foremost, self-discipline. Yes, I know, it is hard.

    Be prepared to go unrewarded for your "extra efforts" which are in actuality basic software engineering tenets.

    Do NOT design at the keyboard. You can be agile without designing at the keyboard, you can be a traditional waterfaller without designing at the keyboard, you can be a spiralist without designing at the keyboard. When you find yourself making design decisions at the keyboard, unless they are truly trivial (and the litmus for this will change with experience) WALK AWAY from the keyboard.

    Ensure that the people who assign you work understand the caveats of what they are currently asking you to do. Even if this makes people think you are being negative, give them the information they don't even realize they need to make better decisions. YOU are the expert on what will happen when implementation happens. For example, if your product manager or account manager or <insert PHP - pointy haired person - here> wants a milestone that includes features that are poorly defined (either through their own recalcitrance or through, most likely, a customer who doesn't know what they really want) it is your responsibility to be the a**hole negative nerd who makes it CRYSTAL CLEAR the implications of doing such a thing. That doesn't mean you don't do it, it means you sacrifice whatever small amount of political capital you have with them to ensure that everyone is on the same page about the potential outcomes. You're going to be shocked by what people can 'pretend' to not recall ;).

    Think about problems in a fashion designed to allow for systemic flexibility because, just like in war, everything goes to plan until the first shot is fired.

    Think about the long term viability and accessibility of the code you write (good variable names - really, I know you've heard it a thousand times probably, but it makes all the difference in the world.) When the choice comes down between 'clever' and 'clear', unless you have a really compelling reason to be 'clever' - go with 'clear.' The codebase isn't a place to show off your 'chops' - it is a place to think about all the people that will or may come into it behind you and they may be clueless or very inexperienced. Comment your code, another 'I have heard it a thousand times' one I know, but people just don't seem to do it because IT TAKES DISCIPLINE.

    If you haven't done much with software patterns, pick up 2 or 3 books about them (both local and network patterns) because, although dry, they often contain the 'wisdom of the ages' for people new to software. Hell, just two weeks ago I was discussing a feature our Services team was implementing for a solution (I run Engineering, we produce products that the Services team [and external parties] uses to implement solutions) and they needed to simulate a physical machine. They were at a total loss about how to accomplish this (no snickering you experienced developers - especially game guys!) When I broached the topic of state machines they all went sort of glossy eyed (like some fish I'd just reeled up from 200 feet down.) After I explained for a few minutes I got a lot of head nodding. The next day I wrote up a little Java applet (yech) that demonstrated a crude approximation of the machine and used a state machine for managing it. Suddenly, everyone in Services is all about state machines (it is pretty funny actually - they have a shiny new hammer and they are wandering around looking for nails.)

    There are dozens of things we could discuss but aside from the final thing I'll recommend below, remember, you don't want to just be a programmer (so it sounds) so to be a software engineer you need to have all the abilities of a programmer but also spend time thinking about the process, efficacy, flexibility, and extensibility of how you will implement solutions to problems.

    The very last thing, and very important although many people who call themselves software engineers ignore it, is to be technol

    --
    Loading...
  125. 3 steps by Anonymous Coward · · Score: 0

    1. build a bridge
    2. have it not collapse
    3. congratulations, you're now an engineer

    1. Re:3 steps by northerner · · Score: 1
      An engineer will optimize the cost, safety factors, aesthetics and many other parameters.

      "Anybody can design a bridge that is strong enough to carry the load.......what is difficult is designing a bridge that is JUST BARELY strong enough to carry the load!"

    2. Re:3 steps by Anonymous Coward · · Score: 0

      that first "anybody" is an engineer. You're talking about a good engineer.

  126. The difference between a hacker and engineer by Anonymous Coward · · Score: 0

    A hacker does it for fun

    An engineer gets paid to do it for fun

  127. What did you gain? by Anonymous Coward · · Score: 0

    The computer industry is mostly experiance driven, so my first question is; what did that "masters in Computer Science " get you that you id not have before, other than a piece of paper?

  128. Work for free by Anonymous Coward · · Score: 0

    - Get used to being assigned to projects at the finish milestone - no money - so sorry
    - the customer wants something invisible before we get paid - please hurry
    - Get used to: no time, no documentation, no drawings, take look - got to run - don't touch anything - it's live

  129. Re:BULL F*CKING SH*T. by Anonymous Coward · · Score: 0

    Maybe you lose work because you're a raving, barely-interesting nutcase with poor language skills. Just a thought.

  130. Legal Issues by ix42 · · Score: 1

    In some juristictions (eg. Ontario, Canada) the Professional Engineer's association takes you to court and collects a large fine from you if you call yourself an engineer and don't have a license from them: http://www.peo.on.ca/enforcement/callmeengineer.htm

    So to "transition from hacker to engineer" with a Master's in Computer Science, you'd turn around, go back into university, and enroll in an undergrad Engineering course. The last time I looked (admittedly over a decade ago) the closest was "Computer Engineer" which did some software, but had rather more in common with Electrical Engineering than Computer Science.

    Be aware of the legal status of the word "Engineer" in your juristiction before you add it to your title.

  131. "Engineer" by Jus10h · · Score: 1

    CS degrees will never be engineering degrees because too many CS people keep saying math is not important I know how to code already.

  132. Where did you go to school? by Antique+Geekmeister · · Score: 1

    Because I'd like to recruit people from wherever you learned. The recognition that testing is appropriate, and that you have things to learn, is so rare among working systems personnel that your school and mentors should be congratulated.

    If you can, talk to the QA people where you work about their processes. Don't simply take their word: have lunch with them, walk through it with them, and note where they deviate from the planned or published release process and why they skip or redo parts. (This is often political, which I'm afraid is part of testing.) And get involved in some GPL projects with test suites, to learn more about how they're structured.

  133. Why a "Computer Science" degree??? by billrp · · Score: 1

    If you want to be a Software Engineer??? There's little in common - a Computer Engineering degree would be more appropriate, and if you had "Electrical" in that degree title you'd have an even stronger engineering basis.

  134. 3 Levels by EmperorOfCanada · · Score: 1

    The first level of programming is hacker. Most of us started there. Basically you are screwing around and after a while your screwing around gets better and better until someone pays you. This is programming as art but this is still fingerpainting. People can get really really good screwing around but there is a limit. Often a master of level 1 might know PHP inside and out. The next level is where you are properly educated. Not necessarily a degree but you need to learn the core, assembly, some discrete math, etc. At this level you can start doing things like building VMs, your own compiler, use OpenGL, etc. Many people graduate from a university thinking they are already level 2 but even their fingerpainting sucks. Many people mistake UML, SCRUM, and other faddish things as level 2; wrong. Hard core math is a key piece in level 2.
    Level 3 looks a huge amount like level 1 as you often go back to fingerpainting. The difference is that there is less time wasted screwing around. It is like one of those artists who walks up to the canvas and with 3 strokes give you Jimmy Hendrix.
    So if you want to move past hacker the next thing to learn is real computer science.
    But .... programming is much more than programming. It is project management, communications, database admin, server admin, graphic design, psychology, plus much more non coding stuff. One of the few certifications that will get you way ahead in programming, oddly enough, would be from the PMI (Project Management Institute).

  135. My only concern by Anonymous Coward · · Score: 0

    How do you get a CS "Master" without learning to use a debugger?

    Once you really learn to use one, you will love and will not understand WHY you haven't using it before. I always assume that if you do CS on your first semester you learn to use a debugger. Why haven't you?

  136. Jack Ganssle has Great Resources by northerner · · Score: 1
    Software and embedded firmware engineering are different than hacking because they build on established practices for writing and testing code.

    Here are some suggestions to becoming a proficient software engineer:

    1. Learn to work your way up the capability maturity model (and help your company to do so). See item 6 in the following article.

    Learn to avoid the "7 Habits of Highly Dysfunctional Developers". http://www.ganssle.com/articles/7habits.htm

    2. Jack Ganssle's articles are great reading for programmers wanting to build reliable systems. They are helpful for both embedded programmers and people working on other platforms.

    http://www.ganssle.com/articles.htm

    3. Here is Jack's recommended reading list.

    http://www.ganssle.com/bkreviews.htm

    I have found his own books to be useful.

    http://www.ganssle.com/book.htm

    4. Jack's articles in Embedded Systems Programming magazine contain lots of programming wisdom.

    http://www.eetimes.com/electronics-blogs/21/Break-Points?Ecosystem=embedded

  137. hacker vs. engineer by Anonymous Coward · · Score: 0

    go study engineering.

    i've had a guts full of scientists, technicians, and other tradesmen calling themselves engineers. you may have read the art of motorcycle maintenance, but sir you are no engineer.

    two words: critical thinking--you don't develop that in CS.

  138. +1 for Code Complete by irishfury · · Score: 1

    Read Code Complete. Then practice the principles outlined in it everyday on every project, and you will no longer be a hacker.

  139. Learn Design By Contract by Anonymous Coward · · Score: 0

    DBC is only about 8 years old and I'd wager that only 1-2% of programmers know what it is and how it works.Google DBC or Design By Contract and try it out on your own time. DBC works extremely well hand in hand with Test Driven Design, in fact I think it enhances TDD by making your software inherently testable and more modular.

    The basic premise of DBC is that every class you create should have a contract and so should any publicly declared methods of that class. Violating the contract IMMEDIATELY terminates your program, meaning that errors get trapped at the root cause of the problem. This is entirely contrary to 'soft fail' and 'defensive programming'. Because DBC forces you to formally declare a contract for each class you create, it forces you to create understandable code--if you can't define the contract for a class, then you need to decompose the class into a series of classes that you CAN define contracts for.

  140. Don't change the mindset by Anonymous Coward · · Score: 0

    "How do you get out of the 'hacker' mindset?"

    I say don't change the mindset it is the best "one-ups" that you can have above your peers. It makes you approach problems differently. I used to be going down the bad cracker path in networking when I first started and then ran into some issues with my old ISP, I was curious about stuff and they sort of saw that so didn't push things further ... Then went to uni with the same curious mentality ... absolutely hated and couldn't stand attending lectures as it bored me to death, so took that as "me" time and didn't attend.. instead took a self study approach and aced all my units with HDs. Then networking certifications and now work as a network engineer. I found that the "hacker" mindset if you will is what is needed to turn you into a true engineer into whatever field you choose, it forces you to automatically think of the most elegant design to solve a problem rather than just coming up with something because "this is what I was taught to do it".

    If you keep that mindset you will shine in the long run as the quality of your work will show through and in my experience it really does pay to be a bit quirky and different in an engineering role :-)

  141. From a recent convert by somarilnos · · Score: 1

    It's a difficult transition, and one I had to make myself within the last year. There are really two major things that helped me to become a much better programmer, and got me out of the 'hack/patch' mindset. 1) My company has a mentoring relationship set up - I had the good fortune of working with a mentor that had the right mindset, and worked hard at it. Even if your company does not have such an opportunity, try to find someone at the company whose work is well respected, and see what you can learn from them (or failing at that, from their code itself, since there should be plenty of documented changes). 2) Take your time. There is always going to be multiple solutions to any given problem. What will set you apart is if you look at it, and cure the problem rather than the symptoms. When you see a bug report, don't take it at face value. Find out *why* the software is doing the sort of thing it's doing, and fix the right problem. The hardest part of it is actually finding the right problem. The easiest analogy is thinking of yourself as a doctor. If a patient has a bad cough, a bad doctor will give you some cough syrup and call it a day. A good doctor will find out why you have a bad cough - sometimes the solution is a cough syrup, sometimes it's a chest x-ray and chemo. But the doctor that gave you cough syrup, even if it did end up being nothing more than just a cough, really didn't do his homework, and is going to do plenty of harm in his career.

  142. You've already got the skills by msobkow · · Score: 1

    Obviously, something like that works quite well in the academic environment, but not in the 'real world.'

    Guess what? With 30+ years of programming under my belt, that is exactly what my career entails.

    "Software Engineering" is a misnomer. While there are certainly aspects of programming which can be canned and automated, the creation of GUIs, reports, understanding requirements, and coming up with the right algorithms to IMPLEMENT those requirements is more art than science.

    Engineering presumes that there are canned rules and "how to" guides to guarantee a program's reliability or a building's safety. There are no such guarantees with software, no matter how thoroughly you test a system. The only exception are "mathematically correct" theoretical languages that no one actually uses for production systems.

    Keep doing what you're doing. Getting an engineering-focused degree will NOT help you find employment.

    Good luck with your career -- I think you're off to a great start with your approach to coding techniques.

    --
    I do not fail; I succeed at finding out what does not work.
  143. Books and technology by lwriemen · · Score: 1

    Books
    Peopleware by DeMarco and Lister (and any of their other books)
    Capers Jones' latest book.
    Gerald Weinberg's books.
    The Inmates Are Running The Asylum by Alan Cooper (UI design)
    Software Engineering Economics by Barry Boehm (somewhat redundant with Capers Jones, but still a good read)

    Technology
    Keep current with latest trends to stay employable. Unfortunately, not many companies hire software engineers; they hire technology experience.
    If you get tired of laboring at the 3GL "abstraction level" (Capers Jones' data will reveal the need for quotes), you should look at Executable UML as described in the like named book by Stephen Mellor and Marc Balcer. Other authors in this field are Leon Starr and H.S. Lahman (Model-Based Development), and another book by Chris Raistrick, Paul Francis, John Wright, Colin Carter and Ian Wilkie.

  144. You might want to look into a QA career by msobkow · · Score: 1

    It sounds like you're more interested interested in the Quality Assurance aspects of the industry than programming. You can be one or the other, but not both, at least not on the same project.

    It is normal for QA to be handled separately from programming so that the testing process can cover cases the programmers didn't allow for. It's an entirely separate discipline of the software process, and you are correct, there are standards and rules if you choose QA as a career path.

    Just be aware that it takes a special mindset to enjoy QA work -- most programmers hate it because a lot of it is checklist regression testing and running automated test scripts, and programmers usually prefer a more creative career path.

    Even without a career in QA, I strongly recommend that you read up on Six Sigma and ISO9000 to understand what the goals of those approaches are. Software creation and testing are a process, and both of those approaches rely heavily on documenting and improving the process over time to reduce the bug reports and improve the quality of delivered code.

    --
    I do not fail; I succeed at finding out what does not work.
  145. Book: Release It by Anonymous Coward · · Score: 0

    I work in operations currently and have practiced development in years past. I think one of the keys is that engineers measure. I'm not talking about merely timing printouts, but really digging into the most effective use of CPU, Memory, Disk, Network. One other key is that whatever you create can and will most likely be in use for many years and it must be well documented, serviceable, and operations friendly. I've never encountered a black box that never breaks...and when it does it's expensive to re-learn what the code is doing and the intent. More often than not it just gets thrown out and rebuilt.

  146. Don't. Keep on hacking. by Anonymous Coward · · Score: 0

    That's still better than what I'm seeing around me.

  147. Why'd you ever want to be an engineer? by Anonymous Coward · · Score: 0

    You get no respect from management or marketing and your career lasts only ten years! Seriously, I've seen jobs advertised as "mid-career", when the experience requirement was two years!

  148. DONT by Anonymous Coward · · Score: 0

    Reading the recommended books you'll see in other posts is a good idea. It gives you an idea what techniques might be necessary for managing a large, long-term system, that other hackers have figured out and described in corporate-speak. It also gives you the ability to speak to others in corporate-developer-speak. You'll find that *some* professional software development techniques are pragmatic at a certain team/project scale, and many are not. Follow your hacker instinct, and keep being a hacker.

    Really, 95% of the software development employees out there are just using these rigorous methodologies to try to emulate hacker-ness, because they can't otherwise muster it naturally.

    1. Re:DONT by mbkennel · · Score: 1

      "Really, 95% of the software development employees out there are just using these rigorous methodologies to try to emulate hacker-ness, because they can't otherwise muster it naturally."

      Huh? Never seen this before.

      The usual difference is that 'engineering' is about understanding and dealing with the realities of other humans: your colleagues, your bosses, and your clients, and yourself, and not just your code and your problem and your shiny toy.

  149. a few suggestions by Anonymous Coward · · Score: 0

    As a self taught programmer who's now doing it for a living I've run up against this problem myself.
    I found this UNSW lecture series helpful:
    http://www.youtube.com/user/unswelearning#g/c/6B940F08B9773B9F
    as well as this one:
    http://www.youtube.com/user/unswelearning#g/c/E621E25B3BF8B9D1
    They are intended for beginners so you probably won't learn any new programming but I like how he puts an emphasis on clarity above all, something I may not have made such at effort at before.

    There's nothing wrong with being a hacker, sometimes problems can only be solved using hacking approaches, sometimes you run up against bugs in compiled libraries which you need to work around using hackery techniques. But the flaw in the hacker is that the code is often only readable to that hacker, and even then only while that hacker is currently thinking about it.

  150. Computer Scientist Programmer Software Engineer by Anonymous Coward · · Score: 0

    A software engineer programs with the goal in mind of just achieving an effective and workable solution to a problem, usually under the structured guidance from management above him. A computer scientist who's also a programmer not only does the same thing but with the added goals in mind of making his code the most efficient running code possible on the target platform while understanding why a particular collection of code is the most efficient it can be upon the target platform. Software engineers are much less concerned about the esoteric stuff like efficiencies, and the "whys". They just want to crank out code thatr simply works and "Gets 'er done".

  151. DONT CHANGE by nsfyn55 · · Score: 1

    Don't change a thing my friend. Code your own code, but keep an open mind to things that will make you better. If a company chooses not to hire you based on your static skill set rather than your potential then you don't want to work there anyway.

  152. Scrum or PSP/TSP by Anonymous Coward · · Score: 0

    My favorite Software Engineering methodologies are Scrum and Personal Software Process/Team Software Process.

    Scrum is enough process to provide schedule sanity.

    When management is concerned enough enough about quality to support PSP/TSP I use that.

    Of course, not many companies care about quality enough to support PSP/TSP. It does require a bit of investment to get going with it.
    In this forum you'll probably hear nothing but outrageous untruths about it (people will claim it's waterfall, not agile, etc) but people who actually use it know better. But you do have to be prepared for higher than usual staff turnover because there are plenty of people who can't deal with it.

    Ironically there are a few Mexican companies that have embraced it and have low enough defect densities to be comfortable offering lifetime warranties on their software. Does that interfere with any of your biases and preconceptions? (About both software quality and Mexicans?) :)

    And it was used by the creators of the Guitar Hero franchise.

    But I'd like to second earlier comments that the most important part of being an engineer rather than merely a hacker is leaving your ego at the door. Hacker and software engineer aren't mutually exclusive, but neither are they the same. Mentor people, find good mentors, ignore religious debates and follow the data instead. Methodologies are just part of the toolbox.

  153. Peer review, peer review, peer review by scgops · · Score: 1

    Get input from others on your code. Have opportunities to review and comment on theirs. Both will grow your skills quickly.

  154. Engineering is all about process by woboyle · · Score: 3, Informative

    Engineering is all about process. To transition from hacker/cs-grad to software engineer, you need rigorous developmental processes that guide how you specify (requirements), design (modeling), write (coding practices), build (turning code into runable programs), test (unit and system), document (in-line, reference, and user), and preserve (version control and release management) your work. Until you have internalized and utilize such processes, you will remain a "hacker", not an engineer.

    --
    Sometimes, real fast is almost as good as real-time.
    1. Re:Engineering is all about process by nsfyn55 · · Score: 1

      I disagree with this heartily. Process exists to force heterogeneous groups of exceptional and unexceptional individuals to regress to the mean. The answer is get rid of process and only hire exceptional people.

    2. Re:Engineering is all about process by Anonymous Coward · · Score: 0

      Lol! And I (partially) disagree with your disagreement.

      Sure, you can have a success or two with exceptional people and little process. And no matter what your process, if you don't have exceptional people you won't do well. But I've seen some very, very good programmers totally screw up a project in ways that a good process used by good people would have prevented.

      I've also seen teams go from chronically late to on time with Scrum, and from very poor quality to excellent quality with PSP/TSP.

      Engineering is about making decisions based on data rather than on a gut feel.
      Effective process is about getting the right data and putting it to use effectively.

      And, as we all know, process done poorly or just for the sake of checking a box or with incompetent engineers is *deadly*. But running open loop with exceptional people is also often deadly. The bigger the project, the more necessary process is.

  155. It's all about attitude. Don't act scared, act .. by spads · · Score: 1

    ...smart

    --
    Bukowski said it. I believe it. That settles it.
  156. Twenty Dirty Tricks by Anonymous Coward · · Score: 0

    I would recommend the article "Twenty Dirty Tricks to Train Software Engineers", from Ray Dawson

  157. Really quick comment -- look for agile employers by davecb · · Score: 1

    Leverage what you know by choosing a company that that uses an agile method: it's not "mechanical engineering", but it's definitely engineering.

    --dave

    --
    davecb@spamcop.net
  158. Brain surgery by Anonymous Coward · · Score: 0

    To transition from hacker to engineer, let them operate away 60% of your brain.

    If you can't afford this, _simulate_ having had the operation.

    And I am serious. Engineering means controllable and reproducible results. If you code at the limits of your capacity, you won't be able to find your way through the code 10 years on, and if you can't find your way, how would anybody else?

    Engineering as opposed to hacking is all about being boring. And not because of the dress code, but because of the code dressing.

  159. Well, You Aren't an Engineer by echusarcana · · Score: 1

    Engineer is a professional designation in most jurisdictions - it requires a degree in engineering or equivalent qualifying exams as well as membership in the professional regulatory body. It would be illegal to represent yourself as such and you can face fines for even using that term in your commercial representation.
    Now, I know this isn't exactly the meaning of your question. But engineering involves a broader exposure to technology in a number of fields to produce a holistic design. Computer science is a more specialized area of knowledge dealing with just one technology: coding of software. In my experience, this contrast sums up the shortcomings of computer science majors I have hired in the past. And I think that is the answer to your question, if you think about it.

  160. Read Lots of Dilbert. by Anonymous Coward · · Score: 0

    There are hundreds of examples where Dilbert mirrors what has happened in my career. You can learn a lot from Dilbert, in both what can and will happen, and get a head-start on thinking of how you would really handle the issue.

    http://www.dilbert.com/

  161. EEs are your friends by Anonymous Coward · · Score: 0

    Start hanging out with Electrical Engineers. Know thy hardware. Start building your toolbox (you probably have a pretty good start).

    The only difference between scientists and engineers is that scientists deliver knowledge, engineers deliver tangible goods.

  162. don't do the obvious by Anonymous Coward · · Score: 0

    the obvious thing to do is read all the books people are suggesting -- it should be the non-obvious that you are interested in. learn the product life cycle from end-t-end and I'm not talking Agile here. Learn how the executive/business team goes about creating roadmaps and strategies, learn about how product marketing goes about their works -- do this for each organization -- then go and learn about how the product is moved into the channel and how the field organization is working with partners OEMs VARs -- learn how your target customer base uses and deploys the product and how their uses use it

    when you finish this in 12-18 months -- you are prepared to be an excellent architect. many architects don't have a clue to this stuff -- so they architect products that are hard to develop, build, test, install, deploy, sell, partner with other entities. you'll have the info you need to architect not just technology (this is what 90% of the architects do), but to architect the end-to-end -- out to the end consumer and back again. you'll probably be standing head and shoulders above the status-quo you'll find yourself in an executive position before you know it

    or perhaps you'll go and start your own business.

  163. Re:Computer Scientist Programmer Software Engineer by pnewhook · · Score: 1

    A computer scientist who's also a programmer not only does the same thing but with the added goals in mind of making his code the most efficient running code possible on the target platform while understanding why a particular collection of code is the most efficient it can be upon the target platform.

    Which is EXACTLY why software development programs tend to be massively over budget and often don't work properly at the end of the day. Like who gives a rats ass if the matrix multiply is the most efficient it can possibly be if the overall system still meets the requirements with an inefficient matrix multiply?? You people spend so much time optimizing the academic worthless shit that there is no time left to actually finish the project, and then you blame management for unrealistic deadlines. Just get it working, make sure the code is clean and easy to understand, and move on to the next task!

    --
    Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
  164. writing code is only 10% to 20% of enterprise by peter303 · · Score: 1

    There is planning, debugging, managing, maintaining, documenting, and selling it. Fresh-face kollege newbies think the percentage is the other way around. If you are lucky your company will offload some of these tasks to specialists, allowing you up to half your time coding.

    My current company is conglomerate of about 40 startups around a special vertical theme (energy). The startup phase is a lot about writing code. Its only a minority activity here. But then I dont have to travel to Abu Dhabi to sell or manage my code then, which is often the beyond the capability of a startup.

    1. Re:writing code is only 10% to 20% of enterprise by plopez · · Score: 1

      I've often commented that 95% of the problems in software are not technical but social. Coordinating software projects is hard. I've done it so I have a clue as to what it requires.

      --
      putting the 'B' in LGBTQ+
  165. Program like you're in a team environment by Anonymous Coward · · Score: 0

    Start using a source code control system(git) even for personal stuff. Consider setting up a continuous integration system as well (Jenkins). Start coding things for personal use, but pay attention to their structure and break them into modules/projects for git/Jenkins. Code for yourself examples of how to implement some kinds of problems which you think will come in handy personally/professionally - how to ORM abstract a database, how to set up the structure of a webapp, whatever you think will come in handy. This becomes your own personal toolkit of "technologies" you can use for projects as they come up - grow it forever and replace bits as they go obsolete.

  166. You are fine by Coward+Anonymous · · Score: 1

    The dirty little secret nobody admits to is that what you described as 'hacking' is software engineering in the real world. Software development is a black art which all the methodologies in the world will never reduce to a simple recipe guaranteed to produce better code.

    The only difference between software 'hacking' and software 'engineering' is the amount of testing.

  167. comment your code by Anonymous Coward · · Score: 0

    and be nice with co-workers :-)

    that's it!

  168. Don't engineer, become scientific by plopez · · Score: 2

    First off, there is no such thing as Software Engineering. Engineering implies replicable best practices to solve a common problem, e.g. building a bridge. There are standards, licensing, courses, and an apprenticeship which teach the standards and practices.

    Besides, there are two possibilities in software, either the problem has been solved or not. If it has been solved then just buy it. Don't reinvent the wheel. If it hasn't, then you are in the world of research and development. This is where the science comes in. You have no real guides, so you start by sketching out a proto-type. You then try to implement it and test it all the way forward. It's the hypothesis/experiment approach. This is why testing is so crucial in software development. If it doesn't pass the tests, try something different.

    Engineering implies canned solutions. In full scale software development there are no canned solutions.

    --
    putting the 'B' in LGBTQ+
  169. MS in CS Fallacy by BBF_BBF · · Score: 1
    Not true in practice for a non-hacker.

    I personally know of two people with masters degrees in CS granted from a respected State University that know squat about programming, let alone the process of engineering.

    I'd be better off hiring a high school drop out to help me program.

    In my experience, people who didn't get an undergraduate degree in Computer Science/Engineering, and don't have an underlying interest in software, but got Masters Degrees in Computer Science, have all turned out to be the most incompetent Software Engineers I've ever worked with, because
    a) they have no underlying knowledge of how programs actually work
    b) they think they are experts just because they have a "MS in CS"

  170. Re:Really quick comment -- look for agile employer by plopez · · Score: 1

    No it's research and development.

    --
    putting the 'B' in LGBTQ+
  171. Books to read by Anonymous Coward · · Score: 0

    Read the Book of Five Rings. It applies to Engineering, carpentry and swordsmanship, and pretty much any other job. First you must practice.

  172. start, do your best, respect yourself, learn by sick_soul · · Score: 1

    > how do you make the transition from hacker (in the positive sense) to a real engineer?

    I like your question. Start in a software engineering position,
    try to do your best while still respecting yourself;
    _engage the people around you_, find the people you resonate with.
    Look calmly at your mistakes and at different perceptions and points of view, try to learn from them.
    Try to keep a high spirit and a playful attitude.

    Do not bash other people even when you feel you are right, learn to negotiate.
    Sometimes it is better to at least discuss a non-optimal but still good solution,
    rather than trying to force what you perceive as the optimal path, at the cost of burning all bridges around you.
    Work relationships and the work environment need to be taken into account.
    At the same time, reality cannot be ignored.

    I would tell these things to the myself of some years ago. Whether that would help, I don't know.. we probably need to learn from personal experience in the end anyway. But maybe some road signs along the way pointing into some general direction can help at least a little bit.

    Good luck, good journey.

  173. Re:Computer Scientist Programmer Software Engineer by Aighearach · · Score: 1

    If only everything was being over-optimized! If only!

  174. Several things by Anonymous Coward · · Score: 0

    First, I strive for elegance, not cleverness. Nine months from now, at 16:15 on Friday, or 02:00 any day, answering a call, I do *not* want to spend the next few hours figuring how I, or the person before me, had been "clever"; I want to easily understand what's happening, so I can get to why it's happening, and then how to fix it, in time to let me leave on time, or go back to sleep that night. A side effect of this is a) you can enhance it a *LOT* more easily, thus making your manager see you as a miracle worker, which might affect your next raise.

    In school, you do minimal checking. DON'T EVER ASSUME that "this data can't possibly get here, leaving your error handling to fall through to a completely inaccurate error. Check *all* your input for reasonableness - don't trust the function (sorry, "method") above, and handle it correctly.

    Finally, if you do something more than once, it's a separate function/method - don't cut and paste. And each of those function/methods should be short, and do *ONE* thing well. We used to say that if the function was more than a screen or two - 25 - 50 lines, unless it was moving a ton of fields, it was doing too much, and should have been decomposed.

                      mark

  175. Maintainability by sjames · · Score: 1

    A big one is that clarity and maintainability in the source are more important than cleverness. That's not to say it should resemble Cobol or anything, but it is necessary to keep in mind that one day years later, someone who has never worked on the code before will need to make a change somewhere and won't have time or desire to appreciate clever obscurities.

    Go download some open source program you haven't looked at before. Pick any little change that might be useful or at least could make sense and try to get it done as quickly as you can. Do that a few times and you'll have a feel for what I'm talking about here.

  176. So you want to be an engineer by Anonymous Coward · · Score: 0

    I'm not sure of where you plan to work, but in the United States the path is straight forward:
    1. Obtain a suitable degree from a properly accredited institution. (This would most likely be an engineering degree, but check the laws of the state you wish to work in.)
    2. Sit for and pass a fundamentals of engineering exam. At this point you are an Engineer In Training.
    3. Spend 5 years working under the guidance of a licensed Professional Engineer.
    4. Sit for, and pass, the professional engineering exam in the state(s) where you wish to practice. Presto! You are now a Professional Engineer (PE)

    You need to be a PE to offer your services to the public as an Engineer. Most states require you to be a PE if you even include the word 'engineer' or 'engineering' in your company name. There are however numerous exceptions. For instance you can provide engineering services to industry without being a PE. Any company can give any of their employees a title with the word 'engineer' in it. Only a very few jobs require you to be a PE. For example the design of bridges and non-industrial buildings require a PE or Architect, the design of an airliner doesn't (go figure). In my state there is an exemption for the design of homes with fewer than 4 floors. Anybody can design a house, right?

    My questions for you are:
    1. What's wrong with being a Computer Scientist?
    2. If you wanted to be an Engineer, why didn't you get an engineering degree?
    3. Why sweat it. Just do what most people with physics degrees do. Just call yourself an engineer.

  177. programmer vs engineer by johnrpenner · · Score: 1

    in canada - you are not an engineer, unless you've been professionally credited as an engineer.
    what you are is a professional software programmer — to call yourself an engineer when
    you are not is akin to adding a: PhD after your name when you never actually received those honours.
    so stop abusing the term.

    (i'm an amateur coder myself, but i strive for excellence in what i do)

    best regards from toronto island

    j

  178. Isaak Newton put it well — by johnrpenner · · Score: 1

    Isaak Newton put it well —

    A vulgar mechanick can practice what he has been taught or seen done,
    but if he is in error, he knows not how to find it out and correct it;...
    Whereas he that is able to reason nimbly and judiciously about figure,
    force, and motion, is never at rest till he gets over every rub.
    (Isaak Newton, in a letter to Nathaniel Hawes)

    that about covers it.

    2cents from toronto island
    jp

  179. In Software Engineering the Process IS the Product by tigersha · · Score: 1

    I cannot say it better than Rands himself: "In Software Engineering, the Process is the Product"

    Read Rands in Repose.

    --
    The dangers of excessive individualism are nothing compared to the oppressiveness of excessive collectivism
  180. Re:Computer Scientist Programmer Software Engineer by pnewhook · · Score: 1

    The problem comes down to you get a developer who believes the beauty of the code is the only thing worth looking at. He then gets assigned to add some features to existing code, looks at *other* parts of the code that don't need to be changed, are completed and are fully tested, reacts with horror saying 'what idiot wrote this piece of crap?!?' and then proceeds to spend a month rewriting it, breaking multiple other things in the process cause he doesn't understand the code. THATS the problem and it happens ALL the time.

    --
    Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
  181. its already taken care of by Anonymous Coward · · Score: 0

    Your employer will clue you in on what he expects. Read your job description.

  182. Re:Computer Scientist Programmer Software Engineer by Aighearach · · Score: 1

    You mean like all the times when there have been exploits to *nix software that happen everywhere except some *BSD version that already saw the sloppy code and cleaned it up in their port?

  183. Re:Computer Scientist Programmer Software Engineer by SomeStupidNickName12 · · Score: 1

    Haha, well said!! Got a developer that works for me who is always late on every project he is involved. So one day I sat down with him trying to understand why he was always late. Was quiet an eye opener when I realized he was effectively rewriting the code 3 or 4 times per module.

    He said he wasn't done until the system was perfect. Now I am all for optimized code but number 1 priority is a working complete solution and then it can be re-factored to improve efficiency/re-writeablity/etc.

  184. Re:Computer Scientist Programmer Software Engineer by pnewhook · · Score: 1

    No I'm not talking about sloppy bad code with bugs that allow exploits. I'm talking functioning *working* code that's been *tested* to be correct, but don't happen to match the aesthetics standards, or 'wow that's a cool way of doing it' standard of a developer that thinks hes top shit. Problems have to be fixed, but changing code to make it more elegant or efficient when there is no performance reason to, or making it run in 3 lines of convoluted code instead of 10 or 20 of very clear easy to understand code is just moronic.

    --
    Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
  185. Re:Computer Scientist Programmer Software Engineer by pnewhook · · Score: 1

    Completely agree. The first run through is to get it working with simple, very easy to understand code. Absolutely nothing fancy. Once it works, THEN you check the performance and optimize only those modules that need it. Simple code is far more likely to be bug free than come convoluted pile of packed code that no one but the writer understands. For some reason coders take pride in the fact that they can write code that works but no one else can read (even though the simple version would have taken an hour and they took a week). Baffling.

    --
    Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
  186. Transitioning From 'Hacker' To 'Engineer'? by Anonymous Coward · · Score: 0

    Have you used the truss/tusc/strace to augment your logging? Here is a tool you can apply to an already running process that you do not source code for, and see all system interactions.

    Good structure prevents bugs, good error checking keeps the bugs from being mysterious and good logging gets you in sync with your code when there is a problem. Good code has a lot of if statements, as almost every call can signal an error with a return or side effect.

    Format your code for future readability, as if for a good text. Formatting prevents a lot of low level errors. You deserve well formatted code, and so do any future maintainers.

    Write your apps modularly, for easy testing.

    Start over from scratch if you realize the structure needs to change. Old strategies become bugs in new ones.

  187. Software Engineering Body of Knowledge SWEBOK by plover · · Score: 1

    If you think you're "missing something" regarding software engineering, have a look at the SWEBOK, published by computer.org. It's a bit out of date, as it's lacking in security and quality sections, but it does have a compendium of knowledge.

    As far as the actual practice of software engineering at a large company goes, my list looks like this:

    1. Testing, and particularly developer-driven testing using automated unit tests. Why are you writing code if you can't prove it works? More importantly, why would your boss pay you to write code that you can't prove works? Really, if you learn nothing but Test Driven Development, you'll already be ahead of 50% of the people who call themselves programmers (including 50% of the commenters above spouting nonsense like "just keep doing what you do".) Of course, once you truly get it you'll realize that it touches all the disciplines of software engineering and design, and that a well-written test serves as your best documentation. And don't forget usability testing.

    2. Design patterns. Civil engineers understand materials and shapes, and use tested and measurable components to accomplish tasks. A civil engineer doesn't need to reinvent the I-beam to build a bridge, they know the I-beam pattern exists and that that if they use them, they obtain performance of X, but have requirements of Y, and side effects of Z. Similarly, a software engineer should understand patterns serve a somewhat similar function in our domain. Pub/Sub will act this way, and it scales this way, but doesn't address retries. Note that patterns are abstract concepts, which makes them distinct from libraries or frameworks. I trust a pattern, because it's mathematically understood to behave a certain way. I don't have the same implicit trust of libraries and frameworks, because those are code implementations that may or may not be 100% correct.

    3. Design principles. I like the SOLID principles myself, as I think they're exceptionally clear.

    4. Security. Understanding concepts like default deny vs default allow, input validation via whitelisting or blacklisting, sanitized outputs, etc., are crucial in the modern world. Check out OWASP and SANS for long, long lists of reasons why security matters to software engineers.

    As an engineer, it turns out there's an awful lot you have to do that isn't directly programming, but is still important, either to you, to your software, or to your company. So the list keeps going.

    5. Estimating. If you end up at a shop that isn't at least Agile (I am, and I wouldn't recommend it) you'll have to provide estimates. Experience is the primary teacher here, but you may find modeling tools like COCOMO II to be valuable.

    6. Code reviews. Understand how to hold an effective peer review, one that helps improve software quality without making the coder feel like an idiot, or afraid for his next review score.

    7. Methodologies, processes, metrics, regulations, standards, and governance. Waterfall, iterative, RUP, Agile, emergent design, test-driven, behavior-driven, lean, all are processes for writing software. Processes also cover things like source code management practices, defect tracking and fixing, project management, etc. At one level metrics are useless things managers want to see regarding productivity, but as an engineer you can use them to help understand code written by others. Standards and governance likewise exist primarily to make the people signing the checks feel like you're doing something for them. They may not matter in a one-man shop, but when you're in a big organization, leading teams of developers, or working with offshore teams, these take on a level of importance that you unfortunately cannot ignore.

    There's a pile of other stuff, of course. Data modeling, software architecture, packaging, deployment, languages, the UML, optimization, encryption, key management and certif

    --
    John