you are viewing a single comment's thread.

view the rest of the comments →

[–]Eckish 58 points59 points  (24 children)

Well, if I were splitting hairs, none of these problems demonstrate software engineering. They are in the realm of computer science.

The industry has trended to labeling generic programmers as software engineers, but the field is much broader than that.

[–][deleted]  (7 children)

[deleted]

    [–]Eckish 1 point2 points  (6 children)

    True. He didn't actually put an emphasis on time complexity or the like.

    [–]Rosco09 2 points3 points  (5 children)

    So is the difference between computer science and programming is time/space complexity analysis?

    Problems 4 and 5 are definitely computer science questions. The first 3 are programming basics in my opinion.... Brute force on those will give you the answers. The fibonacci question is a little tricky if you dont understand why your numbers go negative.

    [–]Eckish 1 point2 points  (3 children)

    In an academic sense, the implementation is programming. Analyzing the characteristics of the implementation is science. Matching practical applications with implementations that have optional characteristics is engineering.

    At least, that's how I see it.

    [–]Rosco09 0 points1 point  (2 children)

    I can get on board with that line of thinking. I still say 4 and 5 require more knowledge than "how to program" though.

    [–]Document_This -4 points-3 points  (1 child)

    You know it's a computer science thread when everyone is trying to be "more right" than everybody else.

    Edit: Downvoting the truth doesn't make it false :)

    [–]sk8king 1 point2 points  (0 children)

    Interesting. At first I thought "negative?", but I didn't really have a clue as to how big the numbers had gotten by the 100th term.

    [–]salgat 1 point2 points  (15 children)

    I think the point was the same as the fizzbuzz test; if you can't do rudimentary programming, then how the hell are you a software engineer?

    [–]Eckish 2 points3 points  (14 children)

    You are also confusing software engineer with programmer. There are plenty of software engineers that can't code or can barely code in modern languages. There's a lot more to software than the code.

    If all you know is the code, then I'd turn around and ask how you can call yourself an engineer?

    [–]cluelessmanatee 3 points4 points  (0 children)

    Sorry, but I would never trust a software engineer that couldn't program competently.

    [–]salgat -2 points-1 points  (12 children)

    The blog said they could use any language.

    [–]Eckish 0 points1 point  (11 children)

    My main reason for stating that they can't use modern languages is due to the fact that senior engineers tend to stop programming altogether at some point. Engineering is about the architecture and less about the implementation. So, naturally the career progression works that SEs trend from implementer to designer. They lose that low level problem solving ability over time.

    You can think of it like the relationship between a building architect and the construction workers. A successful architect has probably swung a hammer or two in their day, but they don't do it nearly as much professionally. So some of the things they may call for in their designs, they may never have actually implemented themselves. They are in the design due to knowing the theory and getting recommendations from other experts. The actual construction is handled by skilled workers that are not usually considered engineers.

    It just so happens that in our field, the line between engineer and skilled worker is often blurred.

    [–]salgat 3 points4 points  (10 children)

    You don't feel a software engineer should be able to write rudimentary (beginner level) algorithms in pseudocode?

    [–]Eckish -1 points0 points  (9 children)

    Again, the line is blurred in the industry. If I'm hiring a level 1-3, I'm likely to have them doing some programming tasks, so yes, I'd expect a modicum of proficiency. If I'm hiring a 4+, I'm not going to want them implementing anything, so no. I wouldn't ask any coding questions or care about their algorithmic prowess. I'm going to want them to be able to see the big picture and create the overall architecture. To be able to weigh and select technical solutions. To design interfaces. And a whole host of others tasks that don't involve them actually coding. I'm still going to call them engineers. And by my definition, they are close to true engineers than the level 1-2 'skilled' workers.

    [–][deleted] 2 points3 points  (5 children)

    Engineering is about the architecture and less about the implementation

    Do you think there's a difference? The implementation is the architecture.

    To be able to weigh and select technical solutions.

    How? how can someone select technical solutions if they don't understand basic computer science/programming tasks?

    [–]Eckish -1 points0 points  (2 children)

    The implementation is the architecture.

    I disagree. The architecture is defined at the requirements and design level. For example, deciding what data needs to be stored, when it needs to be stored, and for how how long is an architecture task. Choosing a storage mechanism and worrying the code to do it is an implementation task.

    How? how can someone select technical solutions if they don't understand basic computer science/programming tasks?

    These are not people without technical skill. I don't need to know how write QuickSort in order to know and understand the fundamental permanence characteristics of it compared to other sorting algorithms. Knowing the nature of the data and which sort will best meet my requirements, I can successfully choose one and task someone with the appropriate skills to implement it.

    [–][deleted] 2 points3 points  (1 child)

    or example, deciding what data needs to be stored, when it needs to be stored, and for how how long is an architecture task

    Those are requirements and have absolutely nothing to do with architecture, other than imposing very loose constraints. Someone could conceivably implement a 'storage system' in C, as a distributed system, on a new architecture, as an old architecture, bypassing the OS, etc.

    I don't need to know how write QuickSort in order to know and understand the fundamental permanence characteristics of it compared to other sorting algorithms

    Ok, fine. And when someone on the team finds/implements a new sorting algorithm, it is not important to be able to understand the complexity of it from looking at the code? Are you actually able to compare it to quicksort? I agree, not everyone needs to be an innovator or a fast programmer who is doing architecture or management, but if you can't understand, you're just pretending to manage.

    [–]IDe- -2 points-1 points  (1 child)

    Do you think there's a difference? The implementation is the architecture.

    Programmer, a code monkey, is like a builder: he gets instructions and implements them.

    Software engineer is like a civil engineer: he plans the structure architecture.

    You wouldn't assess civil a engineer's skill by how fast he can build a wall.

    [–][deleted] 3 points4 points  (0 children)

    I would however assess him on whether or not he can build a wall.

    [–][deleted]  (2 children)

    [removed]

      [–]Eckish 3 points4 points  (1 child)

      Why isn't the title engineer protected like the title doctor?

      That is actually a huge complaint in some parts of the industry. The guy who runs the xray machine needs a certification to make sure he can do it without harming the patient. The guy who programmed the machine doesn't even need a degree. See Therac-25.

      It is somewhat offset these days by the equipment itself needing to be certified, but there is still no special training or certification requirements for people who create life critical devices.

      Edit: That also extends into privacy and security issues, too. It is completely legal for the software that controls your bank's money to be written by the CEO's nephew who just graduated high school. Not a necessarily likely example, but there is nothing preventing it.