5 ms·
I work with a team of people who mostly have "Software Engineering" degrees. I am one of the few with CS. In short: IN GENERAL - Those with SE degrees (or othe
by vbtemp 7y ago
I work with a team of people who mostly have "Software Engineering" degrees. I am one of the few with CS.
In short: IN GENERAL - Those with SE degrees (or other non-CS degree, or no degree) can be excellent developers (good code style, good unit test coverage, aggressive PR reviewers, etc).
However, the art of computer programming - or computer system design -- is often in formally defining the problem at hand using computational structures (such as graphs), understanding the properties of that model, and creating a new algorithm over that model to solve it. Then developing a software system to mirror the properties of that formal system you designed.
Those people who did not spend dozens-to-hundreds of hours agonizing over their coursework in algorithms, abstract algebra, linear algebra, "foundations of computing" (i.e., computational complexity theory, computational theory, language hierarchies, etc) I found can lack this critical aspect of system design. Instead, they design systems that lack unity and are often simply a collection of routines to handle various inputs - rather than having the knowledge to think "Hm, maybe this whole thing I'm working on is a special case of a well-studied problem". What this means practically is that there is often a simpler, better-defined, and more testable solution lurking behind the veil of ignorance.
Sure, there are many many teams and projects for which the scale or complexity are not sufficient to warrant some kind of formal analysis and modeling -- but many do.
- fargo 7y agonitpicking here but aggressive PR reviewers != excellent developers
- kyberias 7y agoWhat is an aggressive PR reviewer? Uses a lot of swear words?
- vbtemp 7y agoHah. Nah, I meant someone who is extremely thorough and catches many thing proactively that would otherwise be bugs that are difficult to track down.
- Gracana 7y agoI suspect they mean someone who is aggressive in terms of their initiative, not their communication style.
- jtms 7y agoBeing able to read, understand, and recommend improvements on code is definitely a mark of a good engineer.
- gamesbrainiac 7y agoI have to be honest with you, I find your experience to be contrary to mine. I went to university to get a degree in Computer Science, but I dropped out because the course work was full of stuff that did not have anything to do with computer science. Furthermore, you will find that in many countries, a Computer Science degree is the same as a Software Engineering degree. I have met many computer science majors who are incapable of writing software to save their lives, let alone design complex systems. I also think that if you get hands on experience first, you learn to appreciate the science later on and therefore learn it with more gusto.
- vbtemp 7y agoYou're right. At the end of the day it's just that special mix of experience (professional and academic), natural talent, interest, and professionalism.
- scaryclam 7y agoI have a CS degree and my university also provided a SE degree. The first years, we all studied together. Only in the final year did we study courses that deviated (some were still shared). The final year was about focusing on either the science or the engineering disciples. I felt like it worked really well. The SE's left with a really good knowledge of computational science, while also learning how to engineer solutions. The CS students got some experience in engineering, without it being the main focus.
- gamesbrainiac 7y agoI think that is a really nice way of doing it. I honestly, don't know what you would do as a capstone project for Computer Science though; perhaps design a compiler or a language?
- bitfhacker 7y agoI have the sake experience of you. I started working when I was 19 and started at 21(at night) a computer science. I left the course at the 4th year because I felt that I wasn't learning anything.
- valleyjo 7y agoWhat’s the difference between SE and CS? At some schools with “computer engineering” that covers EE material related to Computers (circuits, CPU design, etc) as well as CS.
- developerdylan 7y agoAt my school, there effectively was no difference. The only differentiator was two extra classes you had to take as an SE.
- bradleyjg 7y agoI'd say that there's something to what you are saying. But the flip side is that where there isn't a well studied problem lurking underneath, and the CRUD app is just a CRUD app, formally educated computer scientists are more likely to find a mirage of one and end up way overcomplicating the solution. While a good manager should be slotting the right people into the right projects, an important meta-skill for all professionals of whatever background is self-awareness of your own skills and weaknesses and using that awareness to play an active role in determining where you work and what you work on.
- vbtemp 7y agoI hear you, but I've also been around the block enough times in my career to see the awful consequences of designing some feature, breaking it into a few Agile "stories", coding it up, then unlocking an enormous reservoir of down stream complexity that only becomes apparent later... And no degree of making new stories or bugs can put a lid on it because there's no model underneath it -- its just an increasing amount of ad hoc code (however well-programmed: unit tested, peer reviewed, CI/CD-ed). In almost all these cases, developing a simple model grounded in some kind of common CS formalism, playing with the idea, and then explicitly constructing the system around that model would have made the application much more understandable, with a lot fewer mysteries, and reliably used by the customer in much less time. Even small systems containing simple logic, with a few input and outputs, can yield extremely complex emergent behavior (Game of Life being first obvious example).
- kemiller2002 7y agoI agree with you in theory, but here's your problem. You assume people without degrees in Computer Science cannot learn those concepts and those with them automatically understand them. A lot of CS people I've met pass a 15 week course in Finite Automata and could not explain one thing they've learned from it. I can go buy a book on Amazon and watch YouTube videos and become more of an expert on it than they ever will. Outside of certain degree programs that I've worked with people who have them, I would never assume someone knows something because of a Computer Science degree. That being said, you're right there are a lot of people without CS degrees that have no idea what you're talking about and wouldn't know where to begin on certain problems. (And you did say in general too, so I know you were making a basic assumption, and that it's not a steadfast statement).
- vbtemp 7y agoNo, that isn't my assumption. I don't think anyone believes that there's some institution or degree program that spoon feeds everyone everything they should know and guarantees a high level of performance. Obviously, the scope of my consideration are people with a high degree of initiative, creativity, and experience. A CS degree in and of itself is neither necessary nor sufficient.
- zshrdlu 7y agoInteresting. Could you give an example of this?
- jandrewrogers 7y agoI would make the observation that mere "dozens-to-hundreds of hours agonizing" over theoretical topics leaves one very far from qualified to design critical complex systems. At best, it gives one a shallow understanding of the domain but no expertise in the theoretical design of operational systems. Every CS grad knows how to design a database engine -- a very poor and naive database engine that has little resemblance to what an expert in the theory of databases would design. Same story with parallel systems, networking protocols, etc. For as much time as is spent in school on theory, one still needs to spend (at least) an order of magnitude more time going deep in a theoretical domain to understand it well enough to apply it competently. The difference in the amount of self-study required to grok many classes of complex systems design between someone with a CS degree and someone without falls below the noise floor. No matter what, you will need to do inordinate amounts of self-study to acquire theoretical competency. A CS degree is essentially a theoretical survey course. It tells you these domains exist and gives a little bit of high level context, but if you want to become an expert in those theory areas then you are still learning almost entirely on your own and/or from other experts on the job.
- vbtemp 7y agoI positively agree with you. You are not going to walk out of a course or two in automata theory and group theory building critical complex systems. But that coursework does provide a lot of exposure toward the "primitives" in which these complex formal systems are defined. They are the first step of many steps. I am reminded of PGs famous example of the "Blub"[0] programming language .Here's the relevant quote: > As long as our hypothetical Blub programmer is looking down the power continuum, he knows he's looking down. Languages less powerful than Blub are obviously less powerful, because they're missing some feature he's used to. But when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn't realize he's looking up. What he sees are merely weird languages. He probably considers them about equivalent in power to Blub, but with all this other hairy stuff thrown in as well. Blub is good enough for him, because he thinks in Blub. In the above, the "Weird Language" can also be a formal modeling of the problem domain and solution. (Note: He should not be presuming the developer is "he") [0] http://www.paulgraham.com/avg.html http://www.paulgraham.com/avg.html
- leshow 7y agoI have a SE degree, from the Engineering faculty (there are ones offered from CS also). And I absolutely did spend hours in algorithms classes of all kinds.
- scarface74 7y agoHowever, the art of computer programming - or computer system design -- is often in formally defining the problem at hand using computational structures (such as graphs), “often”? You are severely underestimating the number of corporate/enterprise/SAAS CRUD jobs out there that don’t have to do anything that complex.