All Programmers Are Self-Taught
by Jonathan
When I was a teenager I played high caliber baseball. I’m competitive to a fault and when I decide I want to be good at something, results usually follow. Now I’m a third year undergrad studying computer science. There’s something critically different between programming and sports though: A pitching coach teaches you how to pitch, but a CS professor doesn’t teach you how to code.
I was surprised that neither my TAs nor professors critiqued my code during my first year, but grew concerned after my second year. The assignments were larger and the problems tougher, but even after submitting some 2,000 lines of code in my data structures class, I never once had a comment on my code — if my program compiled and my unit tests demonstrated correctness, that was enough. It wasn’t until a small group project that I realized how ugly some code could really be, and I started asking questions about what good code really was.
But what is good code? I take a lot of time to make my code readable and self-documenting. I try to follow the UNIX philosophy on simplicity, that I should make my program work above all and only optimize if there’s a need. I keep in mind asymptotic complexity. I avoid threads unless I really need them. But I honestly don’t know if that’s good code or not (honestly, I think I’m a bad programmer).
I’m lucky enough to have worked with some students I think are great programmers, people who have interned at Microsoft, Google, Amazon and the like. Their opinion is generally the same, that most of what they learn is from self-reflection or picking up on other programmer’s habits. Even the ever-practical engineers share my sentiments. So here’s my claim:
All programmers are self-taught.
My education is giving me awesome tools: data structures, algorithms, database design, concurrent programming, network programming, agile development and different programming paradigms. But these are all tools, and even though they translate to much more efficient and smarter programming, you can still use them wrong — I’ve seen horrible code come from students who do exceptionally well in these classes.
I don’t think it matters if you study computer science, software engineering or get a college diploma, if you’re going to write code for a living, you’d better be ready to teach yourself.
Hi guys, I am Jeanne Denton a professional in academic writing.
I enjoy solving people’s problems and make them happy. That is what I have been doing for decades now.
I have been writing since I was 12 years old and never knew it would turn out to be a full-time career. I have also been able to manage several projects that involves writing. And I worked in three organizations as a volunteer to assist people.My hobbie has always been to help people succeed. And I go the extra mile to make that happen.
I enjoy writing Thesis and have helped people from countries like UK.
I work with a service provider whose mission is to provide quality writing and make people happy. In fact, many people come to me for help on a daily basis because they know I always deliver. And I will continue to provide nothing but the best to build trust like I have been doing for the past few years.
Expert academic writer – Jeanne Denton – http://www.thunderbirdresearch.org Corp
Озеро Чео Лан 1 день Экскурсия – Парк птиц Пхукет, Экскурсия на острова Джеймса Бонда на большой лодке
https://plus.google.com/+Phoenixbailbonds
Pretty part of content. I simply stumbled upon your weblog and in accession capital to
claim that I acquire actually enjoyed account your blog posts.
Anyway I’ll be subscribing to your feeds or even I success you get entry to constantly rapidly.
Excellent beat ! I would like to apprentice at the same time as you amend your site, how
can i subscribe for a weblog site? The account helped me a
acceptable deal. I had been tiny bit acquainted of this your broadcast offered brilliant clear concept
Hi, Neat post. There’s a problem with your web site in internet explorer, may check this? IE still is the market leader and a big component to people will miss your magnificent writing due to this problem.
Hi i am kavin, its my first time to commenting anywhere,
when i read this article i thought i could also make comment due to
this sensible piece of writing.
I really like looking through a post that can make men and women think.
Also, thanks for allowing me to comment!
It’s actually very difficult in this busy life to listen news on TV, so I only use the web for that purpose, and obtain the newest information.
[…] 不过,也有观点认为《所有程序员都是自学成才》,一个好的大学往往只是提供了一系列客观条件,但任何成就都需要人自身的努力,所以是不是有一所好大学,或许真没有那么重要。不过WPDang认为,全球知名应用开发者培育中心,怎能少的了海天学院这样的名校呢? […]
Fantastic post :) I’m definitely looking forward to seeing more articles :D
Good day! This post could not be written any better!
Reading this post reminds me of my good old room mate! He always kept
chatting about this. I will forward this page to him.
Fairly certain he will have a good read.
Thank you for sharing!
These backpacks come in three different chenille animals – elephant, lion,
or bear. Re-gifting is a flawlessly satisfactory strategy to minimize waste
following a principle with the Three or more Urs (Re-use, Decrease and Recycle)
–provided those items you’re re-gifting bring a few benefit to the people you intend to give the crooks to. 26.
Find a right teacher like you find a right key to open a door! But open the door and go over it is by yourself!
[…] All Programmers Are Self-Taught (jgneuf.wordpress.com) […]
[…] All Programmers Are Self-Taught 这篇文章翻译而来。 […]
Plz mail me to kw more about programming
[…] 本文是从 All Programmers Are Self-Taught 这篇文章翻译而来。 […]
[…] 原文出处:All Programmers Are Self-Taught 分享到: (function(){ var _w = 55 , _h = 16; var param = { url:location.href, type:'3', count:'1', appkey:'2606191112', title:'', pic:'', ralateUid:'1670481425', language:'zh_cn', rnd:new Date().valueOf() } var temp = []; for( var p in param ){ temp.push(p + '=' + encodeURIComponent( param[p] || '' ) ) } document.write('') })() 伯乐在线博客传播最新的职业资讯和最有价值的职业分享,欢迎订阅哦。 […]
[…] article is from the All Programmers Are Self-Taught This article was translated […]
In a good class of software engineer you should get some tips to make good code. Some material might come from the book “The practice of programming” http://cm.bell-labs.com/cm/cs/tpop/index.html. I’m an exprienced programmer and I got a lot of tips in the class room at college. So, maybe u should wait a bit to complete your education :)
your TA and teachers never did code reviews because they’re idiot academics. you get in the real world and then you’ll learn to code and someone with more experience than you will teach you. good luck.
[…] All Programmers Are Self-Taught « null device My education is giving me awesome tools: data structures, algorithms, database design, concurrent programming, network programming, agile development and different programming paradigms. But these are all tools, and even though they translate to much more efficient and smarter programming, you can still use them wrong — I’ve seen horrible code come from students who do exceptionally well in these classes. I don’t think it matters if you study computer science, software engineering or get a college diploma, if you’re going to write code for a living, you’d better be ready to teach yourself. […]
When you get into business, it doesn’t matter how ‘good’ your code is. What matters is how well your product works. The fewer bugs and the more features, the better. Your manager may not care how you coded it, just as long as you can get it out on time with no defects and with good performance. You, your programming comrades, and your chief architect will care how well your project is designed and coded, since at most companies, there are coding and design standards. And, simplicity is best. Because, you or someone else will pick up the code at some later time, try to understand what is going on there, and try to modify it to add a new feature. Write your code to be read by a human. That will save your fellow programmers time and your company money.
I am a programmer and have been for almost 20 years. The real test for me on what code is good and what is bad is if another programmer can easily figure out what you did (and it works). I have worried about my code before but after years of working on teams that support mission critical systems, I know that my code is every programmers dream. Simplistic, easy to understand and it works. I can’t say that for many of my team members. What’s the true test is if you go over something you wrote a year ago, can you easily figure out what you did? That is the true test of good code, oh and also if it lasts for years and doesn’t need maintenance. I have a system I wrote for the government and for over 3 years it has needed no maintenance (I no longer work for them), it is a critical system that has been running a major program without fail and has been untouched.and is still running like a charm!
You are right on spot bro. Never could be put any better.
“My education is giving me awesome tools: data structures, algorithms, database design, concurrent programming, network programming, agile development and different programming paradigms.”
All things any growing and evolving programmer would be exposed to with or without school.
[…] All Programmers Are Self-Taught « null device […]
I believe programming is about logic and syntax. As an IT professional and a writer, it’s very similar – you write something and it either works or doesn’t. Go back and check your syntax, fix key lines, take out the superfluous, and everything falls into place.
It’s great that the writer is still an undergrad and has come to this conclusion. It’s really practical experience that helps you. This is such an issue now when managers think you can just find a coder anywhere in the world, but you need one who understands the business/industry first.
I think it depends on the person. I had never programmed before entering college and I learned a lot (but got owned by students who had programmed before) from taking different courses in wide areas. Operating systems, Graphics, networking, security… All these classes taught me some basic concepts in those areas and forced me to do a project or two using those topics. BUT, coding style…dont’ expect school to teach you coding style–read code complete.
Your professors are teaching you to be a computer science professor. On average, they regard coding as vocational training, and beneath them. On average, they aren’t very good at it. If you are one of the 98% of undergrads who don’t go on to get your PhD, too bad.
Having interned at amazon or microsoft doesn’t mean you write good code. It mostly means you remembered your data structures class during the interview. They don’t write good code at microsoft or amazon; they write bad code quickly. Like 100,000 monkeys at typewriters writing the same thing over and over.
Much open source code is terrible code written by people who are very young and/or don’t have anything better to do. There are a few stunning counterexamples. Trust me, you’ll know them when you see them.
The only way you will learn to write good code is to apprentice in a team that values good code, who will review your work and correct your naive behavior. You find these teams in midsized companies, often in sleepy industries. They cannot afford 100,000 monkeys so they go a little slower and do the job right the first time.
Writing good code pays the same as writing bad code quickly, but it is less stress. Ask any potential employer what they do to ensure they produce good code. Most of the time, they will tell you what kind of coder they want, because they want you to fit in. Walk away at once if they don’t match your personal style, because otherwise you will be miserable.
After 16 years in the Software Industry and 11 of those consulting, I will say that some of the best coders I’ve ever run into were those who were self taught and didn’t have CS/MIS/MS/IT degrees. I use all those acronyms to show that even colleges couldn’t come up with a unified way to describe the degree. This is not to say that programming courses aren’t useful, but once I got into the “real world” everything I’d learned had to be thrown out. It gave some nice tools, but the real world is much more disjointed. The best advice I have is to find someone who you can work with and learn how to think logically, the rest is just semantics and syntax. Also be prepared to code one way for one company and another way for the next, be flexible in your thinking. Also don’t get lulled into complacency by knowing only a few languages or worse just one. These too will lose their luster for the next greatest thing to come along, learn how to think! I’ve coded in everything from Pascal to Cobol to C to Java to C++ and C# and a bunch of other languages that have either gone the way of the Dodo or are still hanging around. I’m not an expert in any of them nor do I want to be. I have been able to continue working consistently for all of my 16 years and have never been out of work because of flexibility, learn business first then worry about the coding.
Sorry for the long winded diatribe, but I feel strongly about this topic. I’ve seen too many people get stuck in their own little niche and then get chopped because they could “roll with the punches”.
I tend to agree. I started programming seriously in high school in 1975 and was not taught to “code” in high school or college. I took CS courses and learned many useful algorithms, etc. I was taught structured execution flow as part of a proper use of the go to. I did not take structured exeuction flow seriously until I had been programming in industry for ~5 years. My general opinion is that try-catch is a step backwards, or at best sideways. I’ve been using try-catch for the last 10 years and saw others abuse it, not considering how the app would run for the user when an exception occurred. One of my highest proirity is software that runs well for the end users.
I feel this only encourages coder narcissism. Instead of saying I taught myself, I’d rather give credit to all the co-workers, authors, pundits and bloggers that have provided so much guidance and wisdom throughout my career. I’m thankful to the guys from the design patterns study group for the engaging discussions which taught me a lot. All those programming books taught me a lot. I’m thankful for the open source code which has provided examples of good code.
I am trying get more formal compsci education. I did electrical engineering in school so I kinda missed out. I just took a couple online courses offered by Stanford’s Engineering School which were awesome. I learned a tremendous amount.
I never felt bad about dropping out of my college CS classes. They were teaching blatantly bad programming methodology, especially leaning towards rote memorization. I don’t want to be killed by a program written by someone not willing to look something up because they think they memorized it. Computer programming is not like horseshoes, there is no “close.” I learned how to program with school chums more than I did in any classroom. After that it has been self-taught, with years of experience cleaning up the crap the graduate “geniuses” created and moved on. Writing programs with maintenance in mind seems not to be treasured by management. But then, most management is still using “industrial age thinking” because they want us to document how long it takes to write a subroutine so they can estimate how long it will take to write the next one (“You can’t improve unless you measure it.”), never realizing if it has been written correctly the first time, you never need to write it again. If you are writing programs correctly, you should never doing the same thing twice. I’ve written programs where it took longer to be told the change, than to do the change itself. But then I screwed myself by not getting the changes on to the schedules so I could then pull a Scotty and have it done ahead of schedule. But I digress…
Right and wrong I think. A coach can’t teach you how to pitch, they can teach you principles and mechanics then act as an outside critic to help you look at your own pitching. But you have to put in the 10000 hours to become an expert. Closer to home, teachers of art will teach principles and techniques, observation and structure, then have you copy other work, or work from a common subject, They teach you how to look at the result and criticize.
Good coding classes, internships and the like will have you do the same. Tear apart others code, do maintenance, build test cases then critically evaluate the results, but you still need the 10000 hours of actual design and coding to become an expert, a PhD in CS still places you, at best, as a dedicated novice, not a guru.
I got my CS degree only to have reached that personal goal. At the time I was 30 years out of high school and had been a professional developer for over a decade. Most of what I know I taught myself from books, the occasional course when I could afford it, and the tried and true trial and error approach. IMHO the biggest boon to coding is intellisense, because if you have an idea that a property or method SHOULD be there, you can just hit the dot and look at what’s available. I made lots of use of that and the object browser teaching myself .Net.
What I learned in school was much more about how to navigate the business and politics sides of programming for a living. I learned virtually nothing about programming, lots about project management, getting stakeholders involved, and justifying the costs of a project.
Clean Code was an essential read, so was “The Goal” by Elyahu Goldratt. While not programming-specific, it focused on keeping track of what matters. Like someone said above, get it working first, then get it faster, then get it cleaner!
College is only a few years out of our lives. To stay on game in our field, you have to be learning every single day. Any developer who doesn’t have a Safari Online subscription or a shelf full of books is going to fall behind.
I was a self-taught programmer whose programs would accumulate unwanted complexity, making them hard to modify, and a fertile environment for bugs.
Then I went through a course in Constantine and Yourdon’s Structured Design, and it transformed my programming style. It gave me the tools to avoid a lot of complexity in my programming and made me a better programmer.
The most important lesson for me from Structured Design was writing short functions. I learned to use subroutines to handle the complexity I would previously try to cram into one function.
The resulting function would be elegantly simple, an outline of the algorithm that was much clearer to anyone trying to follow the logic. There was no longer any complexity for the bugs to hide in!
The Structured Design course wasn’t in school; it was at my first full-time programming job. In school, (except for one instructor) there was no concern over programming style; if it worked, it was “correct”.
Aside from my very first programming language course way back in the Mists of Time, every other language I’ve coded in has been a self-taught experience. It’s not just coding either–it’s platforms, networks, APIs, everything. If you can’t teach yourself in this business, you won’t survive.
Completely agree. I’ve been at this since
1976. I can’t remember a single technique
I use that was ever “taught” to me by
anyone else unless you want to consider
books I’ve read “teachers”. It has always
been “read concept then fit to my code”.
If you can’t self-teach you are sunk as a
programmer.
Not correct….. Good universities teach you the principles and logic. The principles and logic is upon yourselve to incorporate in the code. And keep in mind that, EVEN FOR THE SHORTER PIECE OF PROGRAM, ALMOST NEVER HAPPENS 2 PROGRAMMERS TO WRITE EXACTLY THE SAME CODE.
Very well written article. I have taken several courses in programming from two different colleges, such as VB.NET, Java, JavaScript, XHTML, and so. While college and now some high school courses are great at building a foundation for learning programming, nothing beats hands on experience.
A pitching coach will help you to hone one skill but won’t necessarily school you in the intricacies of the overall game. A CS education provides the foundation for acquiring the necessary job skills later in your career: not only “coding”, but design, teamwork, documentation, testing, validation, and more.
Any particular programming language or technology that you learn in university may not serve you for more than a few years or a decade (COBOL programmers may take exception to this).
My CS projects from 20 years ago don’t provide much technical bearing for me today. But because I learned to learn these technical skills and apply them in a broader context, I’m grateful for my CS education.
Agreed. Your education helps populate your toolbox. It does not teach you how to apply those tools on the job. Frankly, most code written by academics is abysmal, and would not be acceptable in a commercial environment.
The best thing any computer science student can do is to intern in the field at a real company doing real work. This is the approach that worked for me. I worked part-time as a programmer through most of my time in college.
Final aside: If you are interning, and they have you fetching coffee, find something else. There are plenty of companies out there who hire interns to do the shit jobs. Some are worthwhile learning experiences: testing and writing documentation come to mind. Others are not: minding servers, running tasks that could be automated, answering the phone.
Agree with you a 100%. Started learning programming at 32 ,ten years back and have enjoyed every minute of it. Great post.
[…] was while reading this post that I found a comment by Patrick Balleux which I really like and want to share with […]
[…] interesting thing i just noticed is https://jgneuf.wordpress.com/2011/12/20/all-programmers-are-self-taught/. I think coders like me should really read that. It’s good to keep in mind what this guy […]
You’re right, which is why my company has all developers read “Clean Code” by Robert Martin (http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_1?ie=UTF8&qid=1324491655&sr=8-1). It has lots of very practical advice for writing better code.
Agree – love that book!
People who write code without white space or comments have a special place in hell. In my experience people who don’t comment their code exhibit other sociopathic behaviors.
I really liked the idea that if you are concerned with what is good then you are probably practicing it already.
People who write code without white space or comments probably don’t wash their hands afterward, either!
People who write code generally exhibit sociopathic behaviors, poor style or not ;-).
Look at it the other way around: people who are not able to write self-explaining code try to cover this up by writing comments.
Comments have one big problem: the compiler (or interpreter) never checks their correctness. So even if initially correct, they are the first thing to become buggy when the code they document changes. Therefore, it is better to write self-documenting code instead of writing code which requires comments to be readable.
@Pete Well said!!
“A CS professor doesn’t teach you how to code” —
probably because they don’t really know *how* to program!!!
Programming is a SKILL/ART. It cannot be forced.
People can’t be forced to apply logic n stuffs! It should be inherent!!
Surprisingly, coding just like in life, if you are wondering what “good” is it probably means you are good.
“A CS professor doesn’t teach you how to code” —
probably because they don’t really know *how* to program. :-)
The CS professors at UCSB told us that programming is part science
and the rest is art. They actually told us that we’d have to
figure it out by ourselves.
Good coding style is often limited by the language and the time allowed to solve the problem.
Bad code is often generated with short dead lines and by dreamers. When I say “dreamers”, I’m thinking about those trying to prove the world that they can create an amazing new framework where their code will solve everything.
I follow those simple rules:
– make it work, then make it clean, then make it fast
– if it looks cool, this is a bad idea
– if it does everything, it will do nothing
– if it need comments, it’s badly coded
Code should be easy to understand. Would you read a book if you were required to use a dictionary to understand each line? Same applies to code.
The quality of code often represents the understanding of the issue to solve. The first step if to have a clean design, well documented. No coding should happen if you cannot understand the requirements first.
My 2 cents
I’ll give you a whole nickel for your two cents. You summed it up nicely.
Nope. Good coding style is limited by rigid corporate coding standards.
While standards are good at enforcing uniformity, languages change, editors change, and new insights into what’s useful and what not also change. Coding standards usually do not. Which means you sacrifice sound and healthy code for consistency. IMO, a very bad trade-off – you sacrifice lower costs now plus higher costs in the long run for slightly higher costs now and lower costs in the long run.
As for your four criteria for writing good code, I have just a slight problem with the first one. IMO it should read “first think it through, then make it work”. Why? Simply because just making it work might cause some extremely difficult architectural problems later on, while if you think it through, it is usually clean and efficient right from the beginning, although maybe not the obvious solution. I have seen many situations where a particular solution needed to constantly change, finally becoming botched and ugly, only because too little initial thinking was spent on developing the right solution, instead of the simplest, obvious solution. Conversely, I have seen many programs which survived unchanged for many years, only because the right amount of effort was spent on getting them right from the beginning.
IMO, becoming a software engineer *should* be like the professional training that all other professions like lawyers, doctors, teachers and chartered engineers have to do, i.e. you learn the theory at Uni, and then spend a few years practicing and learning to code ‘in the real world’ before becoming fully qualified.
However a lot (probably most) of employers don’t see it that way. They seem to think that a Uni CS degree should just be some kind of training course in the latest language-du-jour, and generally rate a CS degree as equivalent to any other when recruiting for programmers. These organisations are usually those where examples of poor code are common in my experience.
Of course you can be a mediocre coder even with a CS degree, just like not all doctors are brilliant, but whenever I’ve come across truely horrific code, it is always done by those who never did a CS degree and so never got the fundamentals.
At some universities (like Stanford), only half of an assignment grade is functionality and the other half is coding style, including things like decomposition, readibility, and straightforward concise comments that someone unfamiliar with the assignment could understand. A class of 600 has a staff of 50 that comments on every assignment. Woah.
I think on the University that i came from. They only taught us basic programming knowledge. They will only open your mind about programming but the rest is up to you.
They don’t just open your mind.
They also saddle millions of students with an astronomical debt burden from student loans. They are also bankrupting the state treasury in half of the countries around the globe. All of that just for “opening your mind”? Wow. Houston. We have problem here.
Well, it’s not like you have to take a course.
There are also no schools which teach you how to light a campfire, how to catch a fish with a fishing pole, and how to write a good song. Programming pays more than these other things, and so we discuss.
But this is all temporary.
The fact that you’re better off teaching yourself, is only 5% of the problem, and part of the much bigger question about higher education. It excludes 80% of the world population, contributes to an artificial social and digital divide, based on papers of questionable value, manages to saddle poor students with enormous student loans, and helps bankrupting entire countries, and even common currencies like the euro. All of that, for things you’d better learn from a friendly colleague, or teach yourself, using tutorials online? Wow. Houston, we have a problem here.
bingo.
you grok it, now go hack.
The grad student TAs for the labs at my university (http://ics.uci.edu) were very strict on writing clean code while the professors’ lectures focused on concepts in a language agnostic manner.
I believe the consequences for bad coding style were -5 points per occurrence. That will whip you into shape real quick if you care about your GPA.
It is a pain to deal with the fallout from sloppy code from developers that haven’t had a rigorous education (either formal or self).
Of course, your college education is just the foundation and you will need to building on that by yourself.
If you’re studying CS to learn how to code, you’re doing it wrong. Coding just happens to be an application of some of the things we learn. CS is more about problem solving in general, computers are just a handy tool we have so we can work faster.
Your instructors are doing the right thing. To learn and get feedback on programming, study computer programming at a college.
in my CS program they do check code … they check your coding style … some professor are very severe …. they check everything ….so I guess every programs are not equal
they tought you how to write code, is that the same like programming?
In my experience, programming is liking learning a language (natural human language). Studied French in high school – later lived in France. Studied Japanese in college and later lived in Japan.
When I first got to both France and Japan, what I’d studied helped relatively little. Later when I acquired a ‘sufficient’ body of working knowledge in each language, what I’d studied was very helpful and enabled me to better make sense of what I’d learned on the street.
Also studied CS and have worked as a professional programmer for over 20 years.
Sadly, I think the problem is that teachers are just happy to have someone successfully solve those harder problems, and they have to spend too much of their time helping all the rest to do much beyond approve. If you want more, it probably has to wait until after class.
I used to be a programmer a long time ago, at the start of the “Patterns and Idioms” movement. At the time, I had a similar feelings to yours: what is good code/design, am I a good coder? Patterns resonated greatly with me at the time because I could finally study the essence of the experience of great designers. It helped that a lot of my teammates were very experience and talented themselves, and we would study and discuss at great length all the details and lessons.
ITS VERY TRUE!!!
30 year programmer here, and yes, you are exactly right. Half of the people in this industry have no degrees, half do. I’ve seen it make no difference in the quality of code or quantity of its output
While I was in school several of my friends were music majors and they had a class on music appreciation which helped them understand different kinds of music and experience and discuss it. It was meant to help them to better write and perform music by mimicking what they experienced. They could even improve on it. If you cannot teach it, you surely should be able draw some inspiration from the best work available and if you mimick it long enough you may learn to do it naturally.
It applies well to software development. Scott Hanselman is a big proponent of “code reading” which I see as the direct comparison to music appreciation. If I had a “code reading” class in college I think it would have been very beneficial.
couldn’t agree with you more. I graduated from CS knowing nothing about programing. It was only through work and online tutorials that I slowly developed my coding.
Interesting to hear your perspective on this as someone still working towards getting your CS degree. I’m a truly self taught programmer with degree in Business and often feel envious of the CS backgrounds of my work colleagues. I do think in all likelihood that a hard core and mature student must demand the most from their professors who may have went into a state of apathy because they see unmotivated students year after year. Even if I look back on my biz degree I wish I’d been more proactive in my education .. the resources are there .. complain nudge and ask for a more details code review. You’re certainly paying enough tuition to deserve it.
Oh, and yeah, self teaching ability is definitely a requirement, so I do agree with your overall point
I’ve been writing code for 30 years and I agree with you. Coding is a craft, and aesthetics can’t be taught. However having been on the one project with a dozen or so other developers for 14 years, I’ve also seen how bad code develops even without malice, and even in the presence of goodwill. Make sure as part of your course you do a course on compiler design, because in there you’ll find some of the trickiest algorithms that require the most understanding. Anyone can hack up a GUI app, but it won’t teach you much about the beautiful mathematics behind computer science. If you can understand this: http://en.wikipedia.org/wiki/Y_combinator you have truly attained Nirvana!
Yeah I experience the same thing. Instructors let me know if something does not pass their tests. But no commentary on the state of my code choices.
And the self teaching never ends. If you truly want to grow in the industry you have to continue to teach, explore, and embrace new ideas. I’ve been writing code as a hobby (when I was young like you) and then professionally for 30 years and have found my favorite part of the industry is the latitude we as coders are given to explore. Very few industries are as tolerant of experimentation and failure as ours. Having the desire to write good code instead of just writing code puts you ahead of most of your peers and many of your seniors.
I must have been very lucky then, all my profs read and commented on our code, on both correctness and style. Of course, this was back in the days when dinos^H^H^H^H^H Fortran and Pascal roamed the earth, I guess things have changed since then.
As in, back when that ^H stuff was still funny.
Well I got it anyway! Even funnier now that it is meaningless. :-)
I must be getting old, because I got the ^H joke. Of course I am only 33 in Hex, and I think all programmers should get to state their age in hex. Especially women of a certain age!
Programming is an Art (not science) and cannot be taught (Well if you teach someone, he can only be as good as you are). You get inspired not taught.
Kind of like flying…
It is an art, but it can be taught especially when in the hands of good mentors where dual piloting is the norm and inspiration is contagious.
When operating solo we are mostly in a box and can remain stagnant, but when exposed to others’ techniques dynamically our learning can be exponential.
Unfortunately all we learn about programming is usually hard won; wading through books or tutorials alone, an occasional juicy tidbit garnered in a class or tossed to you by a peer.
There is a better way…
Army Aviation Warrant Officer
Vietnam Era Vet
Korean Buffer Zone Pilot, checkPilot
Flight Lead
100BC Military Instructor Pilot
Contact,Tactics,NOE,NightHawk,NVG,Instruments
BS Computer Science 2001
Computer Scientist of no renown
Entreprenuer
Disabled
Fully believe Capability Maturity Model level 5 is attainable.
most engineers use matlab?
F-Freaking-Yes, I’ve been saying this for years.
I thought and wrote a lot about this when I was going through undergrad as well. I think what it boils down to is you are doing a Computer Science degree, not software engineering. You’re learning the theory and math and the fact that you have to actually make things with a computer is a side effect. Many great CS thinkers never owned computers or programmed. Similar to how most electrical engineers can practice the trade of electricians though I doubt many of them were trained in the trade.
The fact of the matter is, learning to code well isn’t that hard. You can read Code Complete and get a mentor and you’re set. So you’re right, software engineering is self taught in many ways but it’s also learned through apprenticeship.
If it were possible to directly teach humans how to code– with an inflexible syllabus and a big set of necessary facts and so on– then it would be possible to directly teach computers how to code, and then humans wouldn’t need to code in the first place.
Seriously? By that argument it is possible to teach computers how to pitch baseballs.
And, in fact, it is.
It is. It’s called a pitching machine.
That’s why I think we all “code blind.” http://blog.vivekhaldar.com/post/1243047026/coding-blind
Good thoughts. I felt the same way in college, and I was very surprised to learn that programming is teach-yourself kind of thing. I wouldn’t worry about writing bad/dirty code. Just the fact that you recognize that there’s a difference puts you in the top 1%. And the fact that you actually try to write good code means you’ll never have trouble finding a job.
Just to put it in perspective, I’m about 1.5 years out of college, and have been working at a software company since I graduated. In our code base, there are awful, terribly, horrible acts of atrocious coding that I would be embarrassed telling people about. Dirty doesn’t even begin to cover it. And these guys have been working here for 10-15 years. Bravo for taking your education into your own hands. I wish more professional programmers shared your attitude.
I agree. I did my BS in psychology and now I’m doing my Ph.D. in neuroscience. I’ve taken one class in CS (machine learning). I write quite a bit of C++, Python, and MATLAB code. After I took a class with some engineers this past semester it’s amazing to see how horrible some code can be, even in fields where ostensibly there is a lot of code being written. Now to be fair, most engineers use MATLAB, and MATLAB is probably one of the worst languages to use to learn (teach yourself) “real” programming techniques.
Sorry, I’m one of those people who started coding wih Matlab. (I studied biomedical engineering.) Fortunately, I was also required to take real programming courses in Java and C++. But yes, I find that I am always teaching myself something new, learning from others, and finding the techniques and strategies that work best for me and my projects.