7 ms·
I look at this from the other side as well. I've worked with brilliant people with ivy league CS degrees who wrote much messier and less maintainable code than
by woah 13y ago
I look at this from the other side as well. I've worked with brilliant people with ivy league CS degrees who wrote much messier and less maintainable code than me, an autodidact designer/js dev with 1.5 years of experience. Maybe I'm wrong, and there was something in their code that I wasn't seeing, but I don't think so.
There can also be a bit of an attitude, like the person is thinking "of course this is good, I went to Stanford". But maybe that's my imagination. Another explanation is that these people are just so good that they are able to read messy and convoluted code no problem, and us mortals need to step up our game.
On the other hand, these people would easily be able to reason about complex performance and security issues beyond me. I think that the hardcore CS issues are a science, while writing clean code in a web framework, browser, and API design is more of a craft.
If you hire too many computer scientists, your code base could be full of fascinating technical tricks, but creaky and hard to work with. Too many craftsmen, and you'll get stuck on simple problems. It's a balance.
EDIT: Downvotes? Please explain. Perhaps I am not able to fully comprehend the issues at hand.
- osdiab 13y agoI think people are falsely equating computer science with software engineering. You can get a very strong theoretical basis for programming at a place like Stanford, and the work you can do may have nothing to do with best practices but rather a lot to do with more abstract concepts like algorithmic efficiency or graph analysis or what not. As a Stanford student personally Ive learned a lot more about best practices in software systems outside of the university; in fact you get very little of that from classes. What you do get is in depth coverage of topics that most are unlikely to get a formal treatment of on their own, depending on your concentration, whether that means cutting edge operating systems and compilers research, or rigorous discussion of the psychology behind ux design. Hope that clarifies a bit!
- natrius 13y agoPlus, there are some things that I don't believe can be taught effectively in college. Stanford told me tests were good, but I didn't really believe it until I had to work on a legacy codebase without tests. Best practices are easier to digest when you've experienced the problem they're meant to solve.
- j2kun 13y agoPeople in academia simply don't care about the quality of one particular implementation of their ideas. There's no value judgement here, it's just not their job to write and maintain good software. Just as it's not a mathematician's job to maintain a cryptographic protocol or a physicist's job to keep a satellite in orbit. The people who went to schools with strong research programs are trained by people in that mindset. It's a simple question of motivation. If they're brilliant and they have motivation, then of course they could write great software. They just don't. Make no mistake, people from schools like Cal Poly SLO (a state school, and my alma mater) who excelled in their CS programs can software engineer circles around most. Why? Because Cal Poly has no research program, three quarters of their faculty come from industry, and their faculty have no job requirements outside of teaching. They literally had us managing five to ten thousand line software projects with teams of students in year two.
- onedev 13y agoThat last bit sounds amazing and highly valuable. I go to a well regarded top CS school and I regret that we don't have something like that in our curriculum that forces people to write multi-thousand-lines of code with a team and maintain it. Our EE program has something like that where you choose a team and build something with them over the course of a semester while having an "advisor". At the end you make a report and present it to the advisor and the rest of the committee. It's a requirement for graduation. I think that's awesome and CS definitely needs something akin to that.
- jeremysmyth 13y agoScience != engineering. Engineers take what scientists discover and create and design solutions based on that. Computer science is not about engineering a large software solution. Rather it's about discovering and creating algorithms and techniques that engineers can use to design solutions. Much of the comments to this article seem to be happy to mix the roles of "technician", "engineer", and "scientist" when they are in fact very, very different.
- 13y ago
- banachtarski 13y ago"If you hire too many computer scientists, your code base could be full of fascinating technical tricks, but creaky and hard to work with. Too many craftsmen, and you'll get stuck on simple problems. It's a balance." Your whole post is full over hand waving and overgeneralization. You've never met a CS major who wrote clean code without resorting to fascinating technical tricks? You haven't met a non-CS major who did his or her due diligence to learn the mathematical fundamentals? Please cut the hyperbole.
- TheZenPsycho 13y agoWhat do you expect? We're talking about someone sharing their personal experience, not their 5 year double blind statistically rigorous study. Take it for what it is. I expect HN to be full of people who can take information in, with a critical eye, without wasting time quibbling over quality. We know the quality of the information source (he states it at the head of the comment!), we don't have to rehash the basics, science, and sources of evidence for every comment do we?
- woah 13y agoJust my opinion, and I don't have much experience. I'm sorry if it offended you for any reason.
- nevster 13y agoAlso maybe some other reasons for downvotes: - 1.5 years experience isn't very much to base an opinion like this on - Finding other people's code hard to read is pretty common, no matter how good those coder's are. Your own code generally makes perfect sense to you, same as your writing. But communicating so that all can understand it is hard. That's why flame wars occur. You probably think your comment is a reasonably argued piece of writing, just like you think your code is nicely refactored and understandable. The fact that people disagree and downvote proves the point I think.
- TheMiller 13y agoAnd when you've been writing code for decades, it becomes quite evident that "those other people" can easily be your past selves.
- caprad 13y ago> I look at this from the other side as well. I've worked with brilliant people with ivy league CS degrees who wrote much messier and less maintainable code than me, an autodidact designer/js dev with 1.5 years of experience. Be careful, everybody writes worse code than you, because you wrote the code. And these is a difference in writing nice simple code, and rewriting the same function to work on a bunch of different machines that does the core of the application, and you have until the end of the week until it goes live.
- frozenport 13y agoIt also makes you more successful in life if you learn to delegate work to other people, it clears your mind for a moment of brilliance and you can take all the credit when they are done with their labor. If life were fair our jobs would let us grow like in academia and but this is not the case in industry.
- NAFV_P 13y ago> I look at this from the other side as well. I've worked with brilliant people with ivy league CS degrees who wrote much messier and less maintainable code than me, an autodidact designer/js dev with 1.5 years of experience. Maybe I'm wrong, and there was something in their code that I wasn't seeing, but I don't think so. I would have ignored your comment were it not for you mentioning that you write javascript. I started learning it on and off a few weeks ago, and yesterday I installed spidermonkey as a standalone shell. What I have noticed is that a lot of the syntax that controls flow is very similar to C, which is notorious for being gibberish. I'm guessing the same will apply to js. I do not have a CS degree, but would you say that this is readable? This is a function for extraction of nodes in a double linked list that I am currently kicking into shape. /* * extract *p__ from p__. * but original *p__ is shifted left or right \ * if there is still space. * extracted ndi* is returned, but the remainder of the list \ * is sewn back up. */ ndi *extract_ndi(ndi **p__, const int dec) { ndi *q_=*p__; if(dec>=_PREV_) { *p__=*(q_->lnk+dec); /* the shift */ if(*((*p__)->lnk+!dec)=*(q_->lnk+!dec)) { /* sew up */ *((*(q_->lnk+!dec))->lnk+dec)=*p__; *(q_->lnk+!dec)=NULL; /* burn ends of extraction */ } *(q_->lnk+dec)=NULL; } else if(dec==_LONE_) /* final possibility is that *p__==NULL */ *p__=NULL; /* ie. dec==_DEAD_, no which ain't it not worth man */ return q_; } What the hell was I smoking when I wrote this? I can't even read it myself. Writing convoluted code is more to do with a certain state of mind. You should ask your coworkers where they obtain LSD, not where they got their degree. I haven't come across any acid for about a dozen years, I think it has gone out of fashion. Of course if this was Perl it would be even worse.
- onedev 13y agoSo you never told us what you were smoking.
- NAFV_P 13y agoI cannot remember, but it was damn good stuff.
- userbinator 13y agoWhat I find when I work with "pointy" data structures is that it really, really helps to draw diagrams to clarify your thinking. I can write a doubly-linked list extraction with my eyes closed (and it'd probably help to do it with closed eyes, since I can more easily picture what's going on) but it very likely won't look anything like yours... what's dec for? And all the extraneous underscores in the variable names, I don't see why you need them. What's wrong with p and p?
- chipsy 13y agoThe more you get exposed to other people's code, the less likely you are to dismiss it as bad immediately. Your first impressions are built upon what styles of coding you're already familiar with, and aren't to be trusted as an objective measure of whether the code is maintainable. In many cases, what you might think is a good practice is really just a fashionable one, and holds little engineering value when examined carefully. After enough projects, you get used to navigating codebases that are layered with multiple styles and grungy bits from years of effort. At that point, you have some hope of knowing what can and can't be maintained.
- Nursie 13y agoI'm guessing the downvotes are there (not that I downvoted) because there's absolutely no reason that someone with a CS background can't also be a craftsperson. There's a difference in approach between academic CS and practical software engineering, yes, but a decent CS grad should be able to pick up both. Sounds like you worked with people who just weren't as good as they thought they were at that part of it :)
- jds375 13y agoThis is totally true. I am honestly blown away by how little focus Universities have on coding as compared to Computer Science. I understand that the degree is called "Computer Science" and not "Coding/Programming".... But it would be immensely useful career-wise if they focused on at least some Coding aspects (style, readability, code-reviews, etc.).
- voqk 13y agoI'm a mechanical engineer, when I worked for a small manufacturing shop many of the best machine and fixture designs came from the machinists in the tool room. We tried to achieved the balance that you're talking about by having the machinists and engineers collaborate closely.
- analog31 13y agoI think coding is neither science nor engineering. I like the term "craft" much better.