- People who went to university, going through significant effort for their degree, and want to defend that choice
- People who _didnt_ go to school, perhaps suffering from a touch of imposter syndrome, who want to hide their insecurity
I'm a 20yr old "self-taught" dev. I'm considering going back to school this year. But its a tough choice. Things are going very well for me in the professional world so far. I was in a CS undergrad program for a year but didn't feel like I was learning as well as I was on my own, to be honest.
What I think I can say with confidence is theres not much point in arguing about this. If you want to go then go. If not, don't. Why do we have to prescribe a gospel on this? Let people decide what they want to do. Part of why "self-taught" devs like myself often suffer from insecurity is people shouting the absolute necessity of a degree. I don't see it.
Additionally, I legitimately enjoyed the coursework and learning about high(ish)-level math, art, and engineering that I may otherwise not have. It also gave me free time to pursue fitness and personal projects.
I'm probably not a better programmer as a result. And I'm probably not wealthier either, as I failed to leverage my degree into a position in Big Tech, though as a middling developer, it does make it easier to find jobs. But I do think I'm a better, happier, healthier person, and I would do it again.
The discussion today seems to be all about the logic of it (how will you know what's in a uni degree unless you go?) That was the logic that convinced me to go. It wasn't until I graduated that I could say, with confidence, none of the classes contained anything I didn't already know.
(Yes, yes, including the theory classes.)
But the parent is exactly right: going to uni is a complex decision with multiple independent axes to evaluate: will you make more money over your lifetime (probably not)? Will you get that job you want (probably not, it's more down to people skills)? What will you do with your spare time while in uni (you will have some spare time)? What will you do with the opportunities to meet people?
Then there's what uni you want to attend. How you plan to pay for it. Whether you want to live in a dorm, live with your parents, or go online.
It's always like this when it comes up, which is fairly often here, and I think you're right to point this out. It's an emotionally loaded topic, which means it's a hard one to actually get useful data from.
I think there's a couple of things going on here:
The path someone takes to get where they are is a huge part of their identity. So when they look back on their own history, they want to feel that that path is a good, valuable one because it implies that they are valuable people. So everyone who doesn't have a degree has an incentive to feel it's not important. Likewise, everyone who has a degree wants to feel it is.
The thing is, they're both right. There are many many paths and almost all of them are worthwhile human experiences. Many of them even lead to being a good software engineer. (And of those that don't, they still often lead to being a valuable human in other, often more important ways.)
But the reason it's useful to write about this stuff is for people that are looking ahead and trying to choose a path. Those people want to know the odds of each path and how likely it is to work out for them. Unfortunately, a long list of anecdotes is really hard to synthesize into that. It's like trying to figure out where to eat dinner when every single restaurant review is five stars.
I don't have good data either, but if you're trying to pick your path, I would think about your personality and how that's likely to interact with your choice:
Not going to school gives you more freedom to explore your interests and choose a unique, idiosyncratic path. If you are driven and focused, you can get farther down a road than most others will because you have the freedom to focus on areas where you are passionate. If you want to stand out, it's easier to do so this way.
At the same time, if you aren't self-directed and passionate, you can end up meandering and going nowhere. No one will tell you what to do and it's easy to end up doing nothing, or just dabbling a little in a million things. All of the onus to create structure and discipline is on you.
School will give you a structured environment to learn in. It gives you a curriculum crafted by experts so you will be introduced to topics in a reasonable order and you'll be shown things you might not have realized are important. You'll also absorb much of the culture and tribal knowledge of the field. However, this is skewed towards academia, and if your goal is ultimately industry, this may not be pure win.
Personally, I think going to school is generally a good, safe bet. You'll learn a lot, have a good experience, and meet a lot of people. You'll take a bunch of non-CS classes that will round you out as a human. Even though I dropped out, I got a ton out of my limited college experience, mostly not related to programming.
Not getting a degree is a higher variance path. You may blaze a trail and end up somewhere exciting and unique. You could be the next Bill Gates or Steve Jobs. Or you could end up flipping burgers, or underpaid because you're at a company that values degrees.
Not going to school gives you more freedom to explore your interests and choose a unique, idiosyncratic path. If you are driven and focused, you can get farther down a road than most others will because you have the freedom to focus on areas where you are passionate.
This is me, but I know this is not for everyone. I would advise going to school to make it easier in the long run.
Passion for your work and the focus to pursue it is very important to get somewhere.
If school worked like it does today, 20 years ago, then maybe I could've finished it.
I kept talking to developers online to find out about their backgrounds as I don't have a CS degree. I figured as I was already asking people how they learned to code I might as well write up some proper interviews and share them with other people. This way I can scratch my own itch and stay motivated as well as sharing motivation with other people.
You can check out my traffic/revenue at my open page which I have started from day one instead of waiting until big numbers www.nocsdegree.com/open
It's inspiring to read about developers who are also informally educated. It brings a sense that people like us are more common than we think and that we're really not alone. They're also finding great success despite the prevailing wisdom that you can't make it without a degree. People like that are proof that you can.
I don't know where the idea that a CS course is a good practical training for a career in development came from - I'm pretty glad the course I did included almost nothing that was attempting to "train" you and focused mostly on the absolute conceptual fundamentals (from the electrical engineering side through general engineering maths to specialised CS subjects) as well as letting us loose to actually build stuff with minimal supervision but careful evaluation.
[The thing that really got my attention was the lambda calculus course where the lecturer mentioned the S & K combinators, of course the same course covered the Y-combinator!]
I had a ZX Spectrum but unfortunately just used it to play Fantasy World Dizzy.
I mean, f*cking seriously?
Yeah, that's harsh, but such a headline's an insult to those with a CS degree and serious self-taught developers alike.
To those who made this stay on the front page: given you're competent, you already make the same or more money as those with a CS degree, even if you might know less about the fundamentals, get over it! Upvoting cruft like this isn't going to vindicate your choice.
2) Not everyone does well in a formal school environment. This site shows people that self-taught can still earn good money.
3) Even if a CS degree would increase the Austrian's earnings, how much would it increase it by? Would it offset the cost of the education? Would it offset the wages earned during the years he was in school?
4) People don't always upvote something to the front page because they agree with it. Sometimes people do it to encourage discussion around a topic.
It's about the Taboola-like quality of the headline. They're an insult to one's intelligence. If I want to be insulted on the Internet, I'd go elsewhere.
What a CS degree does, is teach you how to apply the infection. Some CS degrees are like innoculation against them and you come out with a degree, but no grasp of the fundamentals. Others, you learn so much you become a vector of the disease.
For some problems, recursion is vastly superior e.g. for recursive data structure like trees. And coincidentally, often those structures are much better at delivering high-performance solutions than their naive loop-based counterparts.
Granted, it isn't easy to learn, but also not that hard. Overall, I think the gains easily outweigh the effort. And it is not like I am writing recursions all day long. Most of the time I write loops, but you should know when using recursions is the better way to go and for those times you should know how to handle them.
This includes many "functional" languages like Scala. Even Haskell had a default stack size limit until some years ago, and many Haskell based parsers crashed on large inputs due to that.
If you write programs that are supposed to process arbitrarily large inputs, you cannot use function call recursion in most cases.
(Of course this says nothing about recursion as a concept, which is fundamental and unavoidable unless you're programming, say, a traffic light.)
Right up until the point where you have to traverse a nested data structure.
I've been working at Google as software engineer for 7.5 years now.
I guess you could say this is success, but I would not recommend this path; even after 20 years, there's hiring managers or recruiters that won't look at me, and coworkers whose behavior changes when they find out. Impostor syndrome can be an issue.
At my age with family mortgage kids, it's too late and pointless to go back and re-do all the HS math etc. I'd need to get into a CS program. But I do wish I'd done this. It took me a long time to elbow my way to where I am now.
I am very surprised to hear you say this. My background appears to be similar to yours (no CS degree, programming full-time since the mid-90s), and although I did see some resistance in job interviews for about the first 5 years of my career, once I had enough experience under my belt nobody cared what my education was. I've never encountered the type of elitism you describe. Maybe it's a Google thing?
U.S. East Coast.
I've never taken a 'computer class' while in school, although I've taken some instruction while working.
Entirely self-taught. I do this because I like it. Back in the day, I never played video games, I taught myself, and wrote, code. To this day, I don't play video games.
It's been my experience that hiring degreed CS graduates may not be the best course. Theirs a big difference between being 'book-smart' and real world smart. I tend to give preference to guys who write code for fun over those who are in it for the money.
Case in point, we just brought on a high-school student who is about to start his comp-sci degree. He has written code for years for fun. He's just rocking it. I'm sure he'll be invited back each summer until his degree is complete and will likely be offered continued employment after.
If their understanding that amateurs make for better hires than professionals is correct, then amateurs being the minority makes an even stronger case for filtering.
I've worked with loads of self-taught developers, mostly from tech/coding bootcamps, and I've seen a lot of people burn themselves out due to a number of factors:
1. Bootcamps are hard, but suddenly these developers find themselves in a harder environment where 12 weeks of coding experience might not be enough to get them out of a problem.
2. Bootcamps cost a lot of time/money, without the option for a student loan, so many people put themselves into debt to switch careers, and that added pressure is a lot for people - especially when they've been sold a lucrative career and find that a company has hired them because they are cheap.
The CS knowledge aspect is largely irrelevant, because many developers can get by quite happily without ever using a linked list or priority queue, or knowing anything about quicksort, merge sort, etc. For most projects where you need to merge k sorted arrays, concatenating them and running the standard language sort function is good enough.
IMO, the problem has never been one of skill, because many industries have developed skills on-the-job or with time spent in industry. Where a CS degree comes in handy is in giving a student a structured approach to learning over a respectable amount of time, and offering a step above the entry-level barrier of entry.
video courses just won't teach as much. very easy to find best book available for each subject. even going partway through a book will offer more. can skip topics, look at syllabuses for classes offered in higher education that use said book if you want to know what to skip (many syllabuses available online).
for example, instead of taking the operating systems class you can simply actually read either of the two books suggested by this very page.
Found interviews with self taught people who hacked together websites and built businesses.
Admirable but misleading. Suggested title: “No CS Degree required - interviews with entrepreneurs who learned to hack code”
I've found being willing to learn more to help me out, my breadth of knowledge is good enough that in many languages and concepts, I can hold my own against CS graduates.
I think knowing what you don't know is important, because you get incentivized to expand your knowledge. I'm currently studying Maths and Stats, because they're a good base for data science, and where I want to go in my life out of corporate.
The value that I bring to the table is no longer fluency in about 7 languages and a skill to learn more quickly (I've done obscure things like reverse engineering 'complex' accounting rules written in COBOL). What I bring to the table is the ability to solve problems using my financial expertise and technology.
So if anyone's reading this, don't be intimidated by "coding". I see writing software as a natural extension of what's on my mind, using what I understand technology to enable me.
So, stretch your mind, it's a very powerful thing. Have faith in yourself, and do great like the people on No CS Degree
I work professionally as a software developer for quite a while, and what I have seen in the industry is that you gain more merit when you are able to ship product(s) that people will use (or perhaps automate a process that was previously done in a manual manner).
Yes, you can get past the initial gates of hiring qualifications (such as having a CS degree certificate) as well as the coding tests that lots of companies use as a gauge to test your technical capabilities. But no amount of CS degree or certificate would be enough to patch for example when you are dealing with real world software issues.
If you need software to scale to hundreds of millions of users, then you probably need people who have CS degrees to think about your hard problems and how best to optimize them and which ones have no polynomial time solutions for all inputs (problems to be avoided or worked around somehow).
I can do RSA by hand (on small messages), quickly tell (with only pencil and paper) what 2^1027 mod 3 is and do Euclid and Extended Euclid by hand to find multiplicative inverses (in one pass). But I can write code that runs pretty well, too, and I can do that with or without a CS degree. So can most people.
For example, the conceptual framework for reasoning about distributed systems provided by chemical engineering is superior to the traditional CS version when applied to software systems, and more mature. This has been a persistent advantage over the course of my career designing scalable software. And it is much easier for a chemical engineer to learn computer science than the other way around.
I've come across a few other examples of this in computer science, particularly as it relates to complex systems design and behavior, and not just in relation to chemical engineering. Extremely complex real-world systems as a model are relatively new to CS but have highly evolved solutions in other disciplines out of necessity. There is still much value to be had in learning CS from an unorthodox perspective.
Long story condensed: I grew up dirt poor. Went to college. Got my first computer that could get on the Internet (1998). Wasted time online, missed classes, lost financial aid. Ended up going to work for local ISP doing tech support. Quickly moved into web work, and then development. (mostly ColdFusion) This was late 1999, when things were booming and everyone was hiring.
I took a 6 month contract - low on the contracting end of things, but great money for me. Next job was in HR department attached to the airline industry, which was a good job even when the "dot com crash" was occurring. That job ended do to effect of 9/11 on stock prices, but by then I already had a couple of years of work experience under my belt and was on my way.
Today: director of technology for a small company (fancy way of saying I'm the lead developer and lead architect)
What was true for me then is true for many developers today: some are very cut out for this. Looking back, I've always been a programmer; it wasn't a trade someone told me to go to because of the income. That's why I think some bootcampers succeed, and some fail: truth be told, this industry isn't for everyone (alas, I saw many leave the industry in the early 2000s who went on to do accounting or management or car sales or whatever they're a better fit for). Those same students, and myself, would also succeed with a CS degree. I think the lack of one is a matter of circumstance, not a formula for success or failure.
No real regrets, though I had (and still have) a sense of inferiority that drives me to study. Last year I threw out many boxes full of papers that I've read over the years (they're mostly available online now). I have bookcases and bookcases of CS-related material. I've read Knuth, etc. (okay, still going through Vol 4...).
My only regrets are not getting a better math background (a decent calculus-based probability and statistics course would have helped). I took linear algebra in school, but didn't really get it until I started doing graphics and then I needed much more than my college course provided anyway.
Tried going back to school a couple of times. Work always got the better of me. Finally I realized that the degree just wasn't important to myself or my employers, and that I wouldn't learn anything anyway. Lack of a degree has never been a problem when finding a job (except once, and I actually felt pretty good about that one . . . maybe I'll tell the story some day).
I think the key to long-term success (whether you have a degree or not) is continuing self-education. I try to keep up by reading papers and digging into promising new tech. The industry is bigger and moving faster these days, so you have to pick and choose what to stay current on. It's a good idea to branch out anyway (if you read ten papers on storage, networking or graphics, read a couple on something unrelated, like AI or queuing theory or dig into biology or astrophysics -- stretch your head). Helps to do different types of projects, too.
I plan to work until I drop; I feel fantastically lucky to have found a career that I enjoy this much. My father-in-law retired from writing code at age 75, I think I can go longer.
I'm writing mostly to hopefully let others know you can be self taught and be super impactful.
I've dealt with a lot in my life, and our ride wasn't smooth sailing -- https://twitter.com/randallb/status/1110669172487286784
But regardless, now I build things that are high quality and fun.
The practical real-world applications of those classes aren't 1:1 with their first job. I'm a frontend engineer and took 0 classes that are even remotely relevant to my day to day work. That said, foundation adds value. I can speak a common language with other engineers, including those that are completely different than my specialty.
To suggest a persons degree is meaningless is just as nonsensical as saying being self-taught is meaningless. I've also worked with both prestigious graduates that can't program and self-taught brilliant programmers. However, they are exceptions to the rule. The only thing that doesn't indicate much is anecdata, which both of us have now provided.
As an aside, your attitude towards entry-level programmers is likely similar to the attitude of senior programmers when you were entry-level. "Simple" is relative. You were undoubtedly a considerably worse programmer when you graduated as well, assuming your current title was earned through merit. Perspective.
It's possible there's selection bias going on. The wheat end up at the Apples and Googles of the world and the chaff end up working with you.
This isn't intended to be an insult. People who attend ivy leagues are given such a huge leg up that even an average graduate probably make it further than most of us plebeians.
They are more ok with doing 'not fun' stuff, because they have suffered doing a bunch of homework. At work, maybe a percentage of the job is fun, and some things you need to power through. Tuning logs, painfully stepping through the code for the 110th time to find the erratic bug, or boring documentation, also part of the job.
They are less inclined to just copy-paste a solution that you found on StackOverflow and more agreeable to go into the R&D mode of finding the right algorithm. This can be a blessing and a curse.
People that have been through several years of education are more inclined to follow a schedule. We are very relaxed at Silicon Valley and yes some people do their best work from home, but sometimes you just have to be here. College helps form some of these habits.
Last, a degree comes with a lot of soft skills that Universities just throw in sometimes. Communication skills, the ability to summarize properly, grammar and spelling .. not required for a coder but definitely useful for someone that wants to grow into a career into software, eventually you need to interact with Product Managers, Business, Customers, and those unrelated-to-the-job skills start becoming very handy.
I can even speak for myself. I didn't learn to code at school much , did some bash and C here and there but that was not the point of my study. We mostly had math, physics and electronic-oriented courses and more precisely in my case a lot of telecommunication courses.
Still, for a first programming job, engineers (as in those with an engineering school diploma) are often preferred to people with a CS degree, which did a lot more programming that we did.
I would guess that it mostly has to do with the reputation of both the schools and the students from there. When it comes to STEM, engineering school is seen as much more prestigious than studying in a university. Young people with higher grades wishing to make a career in programming more often than not tend to choose the former over the latter - even if it means less focused courses.
And yet having said all that, I wouldn't say that french developpers are worse in any way than developpers from other places. Even if most of us learn to truly program at our first job.
I'm not at all saying that a CS degree has no point, but as long as you have the minimum knowledge about the field when starting, it's very efficient to learn on the job the specificities.
That said, most folks did have some sort of science-related degree. People with no higher education aren't unknown, but quite rare ime. People with higher education only in non-science fields have also been quite rare. I haven't run into many shit hot coder history majors, frankly, but those I have encountered were so smart I'm certain they could have aced any degree they took the time to study for.
Last thought: architecture, design and coding seem more akin to creative endeavors such as writing a novel or play, making movies, that don't seem to be easy to "teach". e.g. nobody is marveling that J.K. Rowling doesn't have an English Literature degree (French, to save you checking..) and nobody is seriously trying to "teach" folks to write the Harry Potter series.
Disclosure: EEE major
I'm willing to bet there's some selection bias here. If you got a job and don't have a cs degree it's probably because you're so good you don't need a degree. The skills outweigh the lack of a degree, which means higher risk. The piece of paper sets the bar lower because there's more trust and thus lower risk.
As someone getting a graduate CS degree and coming from a different degree I notice that there's definitely Swiss Cheese knowledge. I got here because I could code (half my peers can't in their first year of graduate school. This surprised me a lot!). But on the theoretical side they have less Swiss Cheese knowledge than I do. It's a weird dynamic.
It feels like that the reason that I am still working in mediocre jobs is because I don't know how to generate ideas. Or how to make prototypes using design tools. Or how to go about as an entrepreneur.
It's both inspiring and deflating at the same time to people, especially young people, succeed in things that I have dreamed about when I was young.
Just remember it comes down to who you know or who you can meet, you might as well have worked at Burger King by the way some of the filters work.
I got my first programming exposure when I was 5 or 6 on a Commodore VIC-20. By 10 or so I was doing 6502 machine language on a Commodore 64. I went from there.
I have a BS degree in biology. I studied that because I wanted to study something new, but more importantly because I was interested in AI. I always thought (and still think) the best way to learn about intelligence is to study the only existing examples of intelligent systems. These are found in biology. The University of Cincinnati let me do a little bit of a "design my own major" thing so I designed one in "organic intelligence" with classes in genomics, evolution, neuroscience, and ecology. Those are the four scales at which intelligence is found in nature.
I work in computers now (founder of ZeroTier) but still follow AI and biology avidly and would like to return to some of those areas of study someday. I also find that my study of biology deeply influenced me as an engineer and the types of systems I design.
I graduated from college with a degree in Philosophy where I was focused on logical systems. I recall one of my favorite professors being intrigued to know whether I could program and disappointed when I confessed that I only did the design side of web development.
I of course had a strong interest in code, having gone through interactive online python tutorials but I wasn’t able to make a the leap into becoming a developer.
The wall, I realized, was my lack of knowledge in the unix command line. Once I learned about bash, ssh, and setting up basic web servers, my learning skyrocketed.
With a background in logical systems, I was able to grasp the model of computing very rapidly. While I cannot claim to be advanced in algorithms or data structures, I feel comfortable being able to develop solutions that work.
On algorithms, I think being able to use the work of others is already very empowering. Perhaps one day I’ll get into it deep.
It's like they memorized some books and definitions but never actually had to build anything.
The developers that didn't have a formal background in CS almost always did poorly on the technical questions, but I found about half the time it was simply a lack of knowing the terminology. She might not know what a monad is, even though she implemented in her own code.
I have always been into computers, but didn't really consider it as a career until I got a job that required me to do a lot of data entry, so I started teaching myself how to automate things. I turned a 40 hour per week data entry job into a single button click on Monday. This meant I had a bunch of free to time to develop my skills and work on additional programs that would help our organization. I fell in love with programming. I eventually interviewed for a position but failed the technical questions miserably, I didn't understand a lot of the terminology like "linked list", "adapter patern" or what "bubble sort" was. So, after that I got a book just about programming interviews, and realized I had actually implemented most of the practical things in that book, I just didn't know the technical name for it.
After I read that book I interviewed at another location and was immediately hired. The only difference was that I took maybe a week to learn some terms.
The site seems to lean pretty heavily on contradicting the remarkable idea that you might need a CS degree to slap together a website and write some lines of PHP.
But that being said, there's a lot of evidence that some people who don't have CS degrees can do great programming and even great CS, and a lot of evidence that some people with CS degrees can't code their way out of a wet paper bag.
I'm not sure why everyone feels the need to run around with their dresses over their heads every time this comes up; although it does provide a good venue for people to indulge in the harmless pleasure of praising oneself on HN.
I'll say this. There's advantages starting both ways. By starting from a CS background, you're likely to get a formal education into concepts and terminology that might seem boring otherwise. By starting from a non-CS background, you begin with the most important skill a programmer requires-- the ability and passion to teach yourself new technologies and concepts.
Any developer who begins with a CS background can learn to be self-taught.
Any developer who begins without a CS degree can learn algorithms and advanced concepts.
1. You can be highly educated in a subject without getting a formal degree.
2. A CS degree is not a programmer/developer degree. CS is to programming as art is to drawing.
3. Having knowledge of CS might mean you can more easier adopt to a variety of roles (front-end, back-end, systems programming) but comes at a cost that you probably have less practical skills than someone who is specialized in this (because of self-education/going to a trade school/learning on the job).
I have a bachelor in informatics, master in CS and PhD in informatics (technically informatics is not CS, but there's a lot of overlap), but I would say I gained most programming/development knowledge through internships and working on personal projects.
If you are starting career, how are you going to convince someone that it is not passing fad for you, that after 6 months you would say "ok I am done, I am bored with it". There is no way to show people how much time you invested in your self study. It is not about what you know, it is about other people getting to know so they can hire you.
Your point still holds true in this industry when you get as much as 300+ candidates applying for 1 graduate job. As much as I hate it, unfortunately some companies would hire internal candidates than external ones even if they were highly qualified, because they are highly networked within the company.
Having just a CS degree in 2019 is not enough to market youself as a better candidate. It is meerly seen as a minimum expectation from larger companies.
Functional programming has seemed much easier to pick up without formal teaching than object oriented. The latter appears to have many more unknown unknowns.
e.g. in game dev I did not know that static methods and objects existed, so I built a bunch of dictionaries in an instance of a single use class to store some data for a game. It works, but its garbage.
But hey, all things are discoverable eventually, and I would argue going through the experience of why things are nice before learning they exist has some merit to it. I don’t blame companies which require credentials though. Hiring is hard, especially hiring many people at once.
So if you have no prior experience with the web-technologies, I would recommend you to learn a bit of HTML/CSS/JS until you are familiar with them (build a simple, plain HTML page, add some CSS to change the layout, throw in some JS to load some content asynchronously and maybe add some JS buttons to make the page interactive via JS (e.g. change the content when pressing a button)). Nothing too fancy, just make should you know what every language looks like and which language to use for what use-case.
Next, you should find out which Java Framework you really need to learn. When I learned Struts 2 a couple of years ago, I remember that it was considered outdated already.
And then start doing the tutorials of the frameworks, followed by building something you want to build with those technologies (start small and keep adding stuff). At least that is the path of the self-taught developer.
No one second guesses a CS degree, but a good chunk of CS grads (your future coworkers and hiring managers) will second guess a self-taught education.
I learn some of the most interesting shit that I would never have thought to teach my self. Data structures, discrete math, and theory of computation come to mind.
Learning about how grammar and linguistics are so heavily tied into CS has been eye opening and has helped me understand so much more about what's going on in a computer. I never would've learned that on my own.
Sure, probably don't need that to get a job as a developer. But, having a CS degree != being a developer in the first place. I get that they can go hand in hand but it's just not the same.
Most companies don't have a hardline requirement for having a degree anymore, but if they do, even for management, I'll do my best to avoid them.
Last thing, I started coding at 28.
I'm at the ceiling pay-grade wise now, and burnt out, but that's another issue :) The moral of the story is, you can progress really well in this field if you can prove yourself. Experience > Education
However I think that people loving the job are better than the ones that were learning for it, so no wonders sites like this exists.
And in any case I wouldn't go to a self-taught doctor, so something will probably change in the future.
By the way, my site does use HTTPS and for analytics, Simple Analytics so no cookies.
But could you imagine riding in a plane or using critical infrastructure services programmed by people with absolutely no computer science degree to their name? Not a chance. Like getting surgery from a butcher.
In at least Sweden's machine industry programming is just something you learn in your engineering role by osmosis and revulations from God, and typically one to three 7 week courses at university.
Volvo Cars, Volvo Trucks, Scania, SAAB etc.
I for one struggle quite a bit with coding, design, theory, and other aspects. I just don't get how so many people think coding is as easy as "reading a book" or "doing a tutorial".
I don't think this is easy, but when you've been doing it for years and years, it feels that way.
Maybe if you're programming something simple, it will be "step by step". But most programs are not this simple.
> spaghetti code that some untaughts have churned out
Now we see both sides of the coin.
can i write a compiler or a lexical parser or am I versed in distributed computing and/or other highly specialized technical areas? not off the top of my head, but give me a few days/weeks and I know I'll be able to.
Every one will have knowledge gaps, the skills for CS degree and real world programming will have some overlap, but there is whole lot of distinction in both.
I did music for college and the only programming I did was in csound and max/msp.
Long story short, music doesn’t pay much. I just started reading and doing programming. I got gigs almost immediately for solving simple data problems for people (extract these CSV files into this format and pull down web data, etc). Fortunately I had companies where they were happy for me to take on whatever programming I felt comfortable with, despite being in a non-dev role originally there.
12 years later, I’m damn good at this. It helps that I can generally just read a book and absorb it. I’ve read books on CS, but haven’t taken any more CS classes outside watching some MIT course 6 videos. I did take some machine learning classes at MIT over IAP and those were fun. One weird thing, I’ve never taken beyond pre-calculus, but the linear algebra stuff in most ML things isn’t that hard for me. Maybe I’m just lucky? I’m a total hack at math, but can understand concepts quickly still and apply them in code.
One weird quirk was that I had to learn that not everyone can learn like I can. I taught for a few years at General Assembly and learned immediately that most people don’t like being throw in the deep end, or being told to read something and apply it the next day. They need smaller and better defined problems to build confidence. Only 5% of student actually enjoy things on hard mode. That’s ok- it’s just different than me.
Like, at work right now I’m probably going to need to do some Go work. I’ve never used Go outside the first 10 project ruler problems. But- I don’t mind telling them that sure, I can do some work in Go. It’s just code, and if I sit down for 8 hours I can get decent with the language.
The only things I’ve encountered so far that felt were “hard” were Haskell, and anything with shaders and modern 3D programming. I’ll figure them out eventually. TouchDesigner has also been tricky, but it’s mostly that their documentation is scattered (so much in videos) and the ui/workflow is non-obvious. I should write a book on it.
Let me explain: When I learned to program, QBasic was the first language I had contact with. I could make the computer beep but never achieved anything useful. Next, I learned HTML and was very happy about creating something. In school, I learned a little bit about Delphi and while GUI programming was cool, I preferred doing things on the web. A little time, later I came across PHP and was finally able to create real websites. So I coded a few projects with PHP and had my first struggles with arrays and the likes.
Finally, I arrived at the stage where I wanted to learn a real programming language. So I learned C. C was great. I mean, it was also very complex, but finally, I had control over every bit.
At that point, I started a CS degree and learned about pure languages like Smalltalk (Object Orientation) and Scheme (Functional Programming). Those languages were beautiful but felt like a step back in terms of practicality.
When the JS frameworks poped-up I learned to use a few of them too and still use some of them today and while JS is a great language to create results, it doesn't feel to me like a language that teaches you how to write good code.
Along the way, I encountered other languages like Java, C++, Python, Rust and those are certainly not bad languages, but I wouldn't recommend them for beginners.
What makes Go so special, in my opinion, is that it reduces the complexity of C while not taking away its purism. It comes with all the tools you need (except a text editor) and encourages to write good code. Finally, it has good support for building web applications so finding a good use-case shouldn't be that hard. After all, good use-cases motivate students ;-)
I am well aware, that one could certainly argue for every programming language to be the perfect candidate, so please remember that this is a personal opinion.
All professional knowledge is self-learning.
The founder of The Pure Function Pipeline Data Flow.
[The Pure Function Pipeline Data Flow](https://github.com/linpengcheng/PurefunctionPipelineDataflow)
In my opinion, software is more of an art and design discipline than other types of engineering. The traditional notions of what constitutes an engineer do not apply as much to software. This is clear in the fact that we have no formal certification.
That can be both a good and a bad thing.
Lately, I've been exploring other areas of CS which have always interested me, even as a child with my first computer, namely that of "machine learning". Where I have found I fall down in that area is in understanding the deeper level math concepts. I know these aren't really required to come up with solutions to problems using the existing toolsets for machine learning (as long as one can understand the math and concepts at those levels, which is arguably simpler) - but not having that understanding (or only a partial understanding) makes me frustrated that I can't understand exactly what is going on inside "the black boxes".
For instance, I (mostly) understand how MSE and backprop works in a neural network. I also understand why and when to use RELU vs sigmoid (or some other activation function). But could I derive any of that from first principles? Not at my current level of understanding (all those damn rules of calculus - which I don't understand). In many cases, though, I don't need to - I can treat them as a black box. But I don't like it. I do intend to fix this someday.
Of course - this subject - machine learning - has over the years led me down interesting and surprising paths (long before I started really studying it as a subject, in 2011, when I took the "ML Class" and "AI Class" MOOCs). Things more philosophical in nature, but all seemingly related in some manner, at least to my mind:
* Chaos theory
* Network theory
* Emergence and Complexity
* Theory of Mind
* Various topics in neuroscience
* Various topics and ideas in psychology
...with "Etc" encompassing robotics, engineering, electronics, ethics, history, religion - and all the interactions and branches and spaghetti in between.
So much of that I wish I could have a more formal grounding in; I also wish I could speak with (and have the language to speak with) those who have this knowledge and grounding. I know that to be an impossibility, even if I were 20-30 years younger.
It astonishes me that many don't see how much CS in general touches and interacts (and both informs and is informed by) with all those topics and more. I see this, even if I don't understand it completely, and sometimes wonder or suspect that maybe I am wrong at some level? Maybe the lack of a formal education in all of those subjects has caused me to see things which aren't there...?
Alternatively, it could be that by not having such an education, I am - like before - not "constrained in a bubble" so that I don't see those things?
I am not saying I am special in this regard - I have read and spoke with others who have similar ideas to one extent or another, and in many cases their understandings have informed mine.
I'm just not sure if I should focus narrowly at this point in my life at 46 years of age, or go more broadly; both are fascinating paths for me. From what I have seen and read, it seems like the "broad path" would be more immersion in studying philosophy, perhaps with a greater focus on the philosophy of mind and/or consciousness.
At the same time, I like to think about and focus on the idea (and fantasize of solving it - fat chance) of the "wrongness" of backprop - and whether another solution exists for neural network learning that is more biomemetic?
...and at this point, I'm rambling - so I'll shut up.
You can still teach your things, but as soon as you submit to formal training you are no longer “self taught”. That’s what self taught means.
Hm - maybe not, but why is that, exactly? I don’t think that anybody believes that if you admit an otherwise stupid person to Harvard, they would become intelligent through the instruction they’d receive there. Instead, the degree and the institution are a signal - this person had to have been smart in the first place to get in, so you can assume that they’re going to do smart things for your business.
certainly agree that the systems and programming coursework wasn't particularly useful.
It's hard for everyone to enter the industry, especially now, college or not. It's not about how smart you are, or your identity, or your environment. It's how bad you want it, how hard you'll work for it, and if someone is willing to help you.
As software engineers, degrees or not, focus on that last part. Be there for someone learning, studying or just trying to figure it out. Feels great to see a finished product. Feels even better to teach someone how to fish, (code for money). I wouldn't be here if it wasn't for people along the way, giving pointers, telling me where to look, telling me what not to do. I was a gawd dang line cook. Be that helpful person.
Business need both types in this world. No shame in that, but don't lie to yourself into thinking that you can do _both_ with no CS degree. You can't.
The difficult part for you will be obtaining an interview. Because all of the other candidates will have CS degrees, and increasing numbers of them will have graduate degrees. You are at a disadvantage.
To some extent open-source has removed the cost for reinventing libraries, reverse engineering and there is little need to study specific elements in a subject to solve such a problem when you can grab lib_whatever or a free compiler for a language.
You are right that in interviews at famous companies (FAANG, asset management companies, aerospace / embedded systems companies) being self-taught here isn't enough. Instead, they require specific certifications and they look for the graduate with a strong engineering degree rather than someone who is self-taught.*
Right now in 2019, I would do both.
*Having a serious open-source project or significant contributions is actually a huge advantage over recent graduates.
In this sense, UBI is a godsend. But of course, we assume all actors are rational and self-disciplined.
Some PhDs and math students yes (at least, with regards to the algorithmic portions), but otherwise you have to learn the low-level esoteric stuff on your own, or be lucky enough to have a specialized optional course at your university.
And the cutting-edge will rarely be available to undergraduates anyway. All my CS graduate colleagues learned about codecs was how to compute a DCT by hand - they certainly didn't learn the modern 4x4 and 8x8 spatial block transform approximations as used in h264, or any motion vector calculation algorithms, or the x86_64 SIMD intrinsics, or any of the modern entropy coding methods.