While I think its comical that the author casually recommends people to go "speak at conferences", theres some really good advice here.
I came out of a Hack Reactor and started pumping out React code for a small startup. After about 6 months, I was bored and decided to take some Bradfield courses just like this article recommends and the experience has been invaluable. Seeing how some "black boxes" work in details has been super illuminating and helpful at times. The core concepts and even just the code I was exposed to moved the needle in terms of my progress quite a bit and also showed me other areas of software engineering I didn't know existed when I got started.
I'm biased because I've become great friends with the bradfield founders (Hi Myles and Oz!) since I took all their classes years ago, and recently guest lectured as part of their databases class, but they're basically targeted at working bootcamp graduates that have huge C.S holes in their knowledge. More of a practical focus than what I would imagine you get from online MOOC courses (plus live instruction), but to be honest I haven't taken a lot of MOOC's personally so I may not be the best to compare.
Richie -- absolutely absolutely stunning and incredible!
I thought I was making strides. I've taken two BradfieldCS courses and have had some personal mentoring from Myles even before Bradfield was born.
If the original question asker is reading this thread, I can lend some more insight having done MOOCs and Bradfield.
First off, Oz and Myles are behind teachyourselfcs.com, one exceptional and concise site which their curriculum is sort of based off of. Oz is also the author behind, "You Are Not Google" that was HUGELY popular on here a couple years back.
The thing that Oz and Myles brought was their incredible enthusiasm coupled with their passion for mathematics and computer science. They were practitioners teaching at it from a practitioner's perspective with the goal of providing another practitioner the CS most applicable to their jobs. These courses were in-person in San Francisco for a while (but no longer). Look up either Myles or Oz on Twitter and you'll notice that they're very much still engaged in technical conversations and the computer science and how to teach it today.
The one thing I always always took away from the teachyourselfcs.com site is the section under, "Why learn computer science?"
> There are 2 types of software engineer: those who understand computer science well enough to do challenging, innovative work, and those who just get by because they’re familiar with a few high level tools.
> Both call themselves software engineers, and both tend to earn similar salaries in their early careers. But Type 1 engineers progress toward more fulfilling and well-remunerated work over time, whether that’s valuable commercial work or breakthrough open-source projects, technical leadership or high-quality individual contributions.
I have an inkling that Richie, right here, is EXACTLY what they were talking about when drafting this. This blog post exemplifies this.
I've learned so much from the both of them, but I can honestly say, Richie, if you're reading this, this was a f*ckin' gem! Would love to grab coffee with you some time once the pandemic's over.
I worked at Uber too. Turns out if you work at the right places, it opens doors for you. But yes most conferences have a "request for proposal" system.
Yep, the larger and more prestigious conferences may be harder to break into (as they have so many people submitting) but there are smaller conferences that are probably desperately hoping for more people to submit proposals. Or they were before COVID. I'm not sure how the transition to all (or mostly) virtual has affected the conference scene, but that's the way it was in the past.
Based on my own experience, I'd say that you can always start out by speaking at local user groups or Meetups, build a resume of talks you've given, then apply to smaller / regional conferences, do a few of those, and ... well, that's where I stopped. All Things Open is the most prominent event I've presented at. But the point is, bootstrap and work your up the ladder.
Look at the whole thing holistically too: blogging, putting content on Youtube, open source projects, etc, all go towards building your overall image and presence "out there".
Most conferences will accept almost anything even tangentially related to their focus. Because nearly all proposals will come from companies trying to market their crap in conference talks disguised as something else, when they get applications from people with something really interesting to say which is not related to something they're making money on, they will almost certainly accept. It may b e hard for the first couple of talks as you don't have any experience doing it, which means you may suck at it, but you can start by talking at local meetups or even internally at your company, which is less challenging and will get you some experience to get started.
Well-written article and kudos to the author on their career success!
One nitpick, the part about comparing possible startup comp in a unicorn exit and as a senior eng at Facebook over an 8 year period is missing the possible tax benefits of the startup comp. Facebook comp will be taxed as ordinary income as the stock is granted as RSUs (basically 40 - 50% in the US in the $500k/year bracket depending on the state you live in), whereas the majority of a $10 million windfall from being an early employee at a startup that exits after 8 years would likely result in at least half of the tax burden if you did it right and the options were ISOs. With a 4 year standard vesting schedule, the majority of options would have vested far before the startup was a unicorn, and the tax burden at time of option exercise may be very low. Assuming then a long term capital gains rate of 15% at time of sale, the comparison to Facebook comp over the same timeline is about 4x in favor of the startup rather than the 2x the article proposed.
As the author says, though, the startup route is exceedingly risky and very highly likely not to come out ahead.
LTCG rate on a $10M exit is already 20% today (and I think even 23.8% if the Obamacare 3.8% surtax applies, which I’ve not researched recently, but I think does apply).
There’s a heavy twin push to find more sources of revenue and to increase taxes on cap gains specifically, so I don’t know that I’d bank on capital gains taxes continuing to stay low long enough to take advantage of them. All taxes on $10M exits are going up; cap gains probably faster than income.
Regarding the rate - LTCG depends on ordinary income level. The 2020 rate for someone earning $150k was 15%, so the $10 million exit in the author’s example would be taxed accordingly. Unless I’m missing something here?
LTCG tax rate is based on your AGI (adjusted gross income) not your wage income.
Capital gains "count" towards your AGI, so if you have $10M in capital gains and $150K in wage income and nothing else, your AGI is $10,150,000 and your LTCG are taxed at 23.8% (20% + 3.8% surtax).
I wish the author went into more detail about how to come up with "high leverage side projects" that help cultivate the type of fundamental CS knowledge he emphasises.
Most of the suggestions I see for potential side projects are for some kind of consumer-facing (web/mobile/desktop) app - probably because most people in this context are prioritising the potential of generating side income, but this sounds more like what the author calls "plumbing" style backend/API work rather than something that would develop fundamental CS skills.
So, any ideas? I've seen https://github.com/danistefanovic/build-your-own-x which is a great collection of ideas all based on piercing an abstraction by building your own version of lower-level tools. Are there any other categories of side project that someone who wants to move technically deeper than a full-stack web app would do well to consider?
Nand2tetris is pretty awesome if you don’t already have strong CS fundamentals and feel like you “know how computers work”. If you had a good C.S education though you may not get much out of it.
I built this with some friends a few years ago: https://hyperdash.io/ (building the backend for this was a good learning experience and I learned a lot about writing multi threaded software making the python SDK).
Those are just some examples to give you an idea, but to be honest it’s hard to give a good answer because side projects are deeply personal.
It takes serious discipline and motivation to spend your nights and weekends writing code when that’s how you spend your working hours as well, so it’s really gonna be about what motivates you and will keep you engaged while also gaining “high leverage” skills (anything fundamental in the realm of networking, compilers, databases, data structures, etc. basically anything that’s not just another language or framework)
Is that a flash card thing? I think if you’re actively trying to “retain” knowledge like that you’re probably doing something wrong.
For context I studied biochemistry in college with the intention of being pre-med and that is how I did all my studying, creating notes and flash cards for rote memorization because memorizing trivia is what’s required to succeed in that path, but I think it’s the wrong approach for furthering your education as a software engineer.
I still take notes today sometimes (because the act of writing helps me absorb information), but I’d never go as far as making flash cards.
When you’re studying this stuff I think the goal is more like, learn about what’s “out there” so you know enough to recognize that there is a thing whose details you should look up when needed.
Let me put it this way, if you read a textbook cover to cover on operating systems you won’t (and don’t need) to remember every little detail of the data structures and algorithms involved. But studying it once means you’ll never forget that they exist or what the difference between a thread and process is, and the remaining details are always a short lookup away when you need them!
If you do want to go really deep on a topic than my recommendation would be read about it / study it first, then go implement something in that area (even if it’s just a toy) if you want to make sure you really understand it.
Is that a flash card thing? I think if you’re actively trying to “retain” knowledge like that you’re probably doing something wrong.
It's a spaced repetition flash card program. If you just want flash cards, you use quizlet.
For context I studied biochemistry in college with the intention of being pre-med and that is how I did all my studying, creating notes and flash cards for rote memorization because memorizing trivia is what’s required to succeed in that path, but I think it’s the wrong approach for furthering your education as a software engineer.
Understanding is always preferable to pure brute force memorization. For one thing, going through flash cards will be much faster, easier, and less frustrating.
If you don't understand a concept, it's going to create leeches, which suck up study time.
I still take notes today sometimes (because the act of writing helps me absorb information), but I’d never go as far as making flash cards.
It helps you absorb information and convert it to knowledge, yes. But decay of knowledge is a thing. Flash cards are just the format. What it allows you to do is formulate questions or prompts which allow you to practice active recall. Active recall of information is one of the gold standard for studying.
If you do want to go really deep on a topic than my recommendation would be read about it / study it first, then go implement something in that area (even if it’s just a toy) if you want to make sure you really understand it.
Simply reading is one of the poorest strategy for learning. Active recall is much better. I agree that implementation and actual practice of skill is a good use of time, which might fall under the category of active recall.
Anyway, I am still trying to find how anki fit in my overall system for learning programming / software engineering. One of the thing I lacked is technical vocabularies for describing what I am seeing or doing, which I think anki can help with a lot.
Some people has success with it, but not for me. I suspect that it has to do something with the low density of cards/notes I added to anki.
I have heard of Nand2tetris, but I always thought it fell more into the 'read a textbook' bucket than the 'do your own technically challenging project to reinforce the learning' one. But I guess it's a project-based textbook, which kind of blurs the lines.
Thanks for sharing those examples. I guess the common thread here is to work on _building_ things that exist at lower levels of abstraction, rather than just knowing how to use them as a black box. I guess most project ideas that satisfy that criteria would teach some fundamental skills too.
For me, I started building programming languages (and standard libraries) years ago as personal challenge and to learn more about how various languages work. Later on that branched into emulation (x86/amd64, armv8/aarch64) and more recently databases. (You can find these kinds of projects on my github).
Before that when I was more focused on web tech, I'd build clones of React or Bootstrap or Flask to increase my understanding there.
It helped being surrounded by people with a lot more experience than I so I'd keep being in a situation where I knew nothing about some field and wanted to not be embarrassingly naïve :D so I'd try to build something from scratch to learn it.
It doesn't always work out! An example of a topic I haven't yet been able to get into is the TCP/IP stack. I got somewhere into the IP layer on top of userland raw sockets but TCP complexity and may poor C skills failed me as the algorithms needed for tracking state came up.
I think your reply reinforces a conclusion I drew from the OP's reply - that the common thread here is to work on _building_ things that exist at lower levels of abstraction, rather than just knowing how to use them as a black box. And in building things, I guess you learn the ins and outs of how they work, which makes you better at using them?
Thanks for the examples. I'd never even think of being able to build my own programming language, or clone of Flask - which I guess is the point, I shouldn't treat these things like black boxes :)
Yeah by building stuff you come to understand that all abstractions are arbitrary but you also come to understand why previous projects picked the abstractions they did. So it helps even just as a user, you don't have to be building frameworks, languages, databases professionally to benefit here.
Can someone explain the trend of fetishizing the “bootcamp fairytale” whereby someone doesn’t have a CS background but ends up as a working programmer after going to a bootcamp?
Let me explain. I didn’t study CS in college, but I did stud CE, a relatively related field. When I started working as a programmer, I immediately felt that there were some fundamentals I was missing, so I’ve spent a lot of time reading in my spare time to fill in some of those gaps.
There seems to be a trend where someone switches careers, and glorifies the fact that they don’t have a CS background. Why dismiss the history of the field that you’re in? Not everyone has a PhD in CS, but there has been some incredibly important work done in the field, work that we all stand on the shoulders of. Is this an ego thing? It’s hard to be humble and admit that you have a lot of things to learn, so instead you resent the field and blame it for being arrogant?
I think it has to do with CS / computer engineering academic skills not carrying over too much to the software industry when compared to, say, how much a Chemistry or Chemical Engineering degree carries over to related industries. I have plenty of formal education, but to this day most of what I learnt after high school has been useless as a software engineer.
I’m always surprised when I see people say things like this, based on my own experiences. In the last month or so, I’ve used:
- linear algebra (transformation matrices and inverses primarily)
- calculus
- approximation methods to get “good enough/fast enough” solutions to the Chinese Postman Problem and the Traveling Salesman Problem
- a self-derived plane sweep algorithm for doing something special with a ton of planar polygons
The only conclusion that I’ve come up with so far is that it either varies dramatically by which industries you’re developing software for, or other organizations have people with specialized skill sets that work out the broad strike solutions to these types of problems before getting the software teams to build the production versions of them.
Don't get me wrong, I do plenty of exciting stuff on my side projects (involving linear algebra, some AI, etc.)
I completely agree with your last paragraph. I am a backend engineer, a job that at its core involves creating and fixing CRUD apps, and writing relatively simple business code. No matter how exciting people try to make it seem.
I think the "CRUD app" classification is never accurate. For example, your app almost certainly performs queries that have a where clause. That means that the R step has logic, which means you can (and I know I do) get the logic wrong. Also, there's usually complicated rules during C, where a user is only permitted to actually create data in certain cases, and when data is created other data needs to be updated to remain accurate, etc.
So yea, of course data is Created and Read, in that every application maintains data. But that doesn't mean that it's a CRUD app. If you have any where clauses or if expressions, it's not a CRUD app.
No intention of fetishizing or dismissing the field was intended. If you read the post I think you’ll see I’m doing the opposite. All the work I do today is predicated on a strong understanding of C.S fundamentals that you dont learn in a programming bootcamp. I’m actually encouraging everyone who did a programming bootcamp to take the time to go back and fill in the knowledge that they’re missing because I think it’s so important for achieving a satisfying career and high impact work.
Some of us realized we wanted to work in this field too late after we had already gotten an undergraduate degree in something else. A big part of the message in my post was that C.S education is important and encourages people to find ways to fill in that missing knowledge one way or another (although I don’t usually encourage going back to get another 4 year degree formally because I think there are faster ways these days that don’t involve losing 4 years of income.)
There was no intention to brag about my lack of education here and I think if you asked most people I work with they’d probably be surprised to know I don’t have a C.S degree.
I know the title is a bit click baitey, but it’s just a hook to get people to read what I think is a lot of practical advice for getting their career to where they want it to be.
I'm not against click bait personally. You have to get people in the door! And I'm not against bootcamps at all. They have a much denser amount of value-per-time-spent than college.
I was just making a general comment on the topic. I agree with everything you've said.
My degree is in Mechanical Engineering. I’ve done programming all my life, sometimes in roles where Mech E or Manufacturing knowledge is useful, but mostly not. I took a few programming courses and EE courses as an undergrad. I can’t prove how much they did or didn’t help, but 95+% of what we do in industry is not aided by a deep theoretical grounding and computer science and the 5% that is, 95% of that can be easily picked up outside of a formal CS program.
I don’t think it’s an ego thing so much as a belief in the power of the rags to riches bootstrapping story arc. In our field, that story is totally doable.
On the “opposing side”, I do see every so often someone without a CS background set out to do something that boils down after not too many simplifications to “First, I’ll solve the general halting problem and then build on that to do task XYZ. Simple!”
Great article. I wish BradfieldCS would offer some kind of discount for people from countries who don't have a USD salary. I make $600 a month before taxes and expenses. I can put aside $100-150 a month if I live slightly frugally and be strict with my savings. I don't see myself saving $1800 (12-18 months) to take up one course. Same goes for their new program - https://bradfieldcs.com/csi/ - $19500.
Does the author or anyone have any other free/affordable alternatives for BradfieldCS? teachyourselfcs is the only one I can think of which I'm following currently.
46 comments
[ 2.9 ms ] story [ 94.2 ms ] threadI came out of a Hack Reactor and started pumping out React code for a small startup. After about 6 months, I was bored and decided to take some Bradfield courses just like this article recommends and the experience has been invaluable. Seeing how some "black boxes" work in details has been super illuminating and helpful at times. The core concepts and even just the code I was exposed to moved the needle in terms of my progress quite a bit and also showed me other areas of software engineering I didn't know existed when I got started.
What makes them better than the online MOOC courses at Stanford, MIT, etc?
I thought I was making strides. I've taken two BradfieldCS courses and have had some personal mentoring from Myles even before Bradfield was born.
If the original question asker is reading this thread, I can lend some more insight having done MOOCs and Bradfield.
First off, Oz and Myles are behind teachyourselfcs.com, one exceptional and concise site which their curriculum is sort of based off of. Oz is also the author behind, "You Are Not Google" that was HUGELY popular on here a couple years back.
The thing that Oz and Myles brought was their incredible enthusiasm coupled with their passion for mathematics and computer science. They were practitioners teaching at it from a practitioner's perspective with the goal of providing another practitioner the CS most applicable to their jobs. These courses were in-person in San Francisco for a while (but no longer). Look up either Myles or Oz on Twitter and you'll notice that they're very much still engaged in technical conversations and the computer science and how to teach it today.
The one thing I always always took away from the teachyourselfcs.com site is the section under, "Why learn computer science?"
> There are 2 types of software engineer: those who understand computer science well enough to do challenging, innovative work, and those who just get by because they’re familiar with a few high level tools.
> Both call themselves software engineers, and both tend to earn similar salaries in their early careers. But Type 1 engineers progress toward more fulfilling and well-remunerated work over time, whether that’s valuable commercial work or breakthrough open-source projects, technical leadership or high-quality individual contributions.
I have an inkling that Richie, right here, is EXACTLY what they were talking about when drafting this. This blog post exemplifies this.
I've learned so much from the both of them, but I can honestly say, Richie, if you're reading this, this was a f*ckin' gem! Would love to grab coffee with you some time once the pandemic's over.
Why's that comical? If you have something interesting to say, go for it! Even if you don't, there's no harm in applying.
Most people are way more interesting than they think they are.
Based on my own experience, I'd say that you can always start out by speaking at local user groups or Meetups, build a resume of talks you've given, then apply to smaller / regional conferences, do a few of those, and ... well, that's where I stopped. All Things Open is the most prominent event I've presented at. But the point is, bootstrap and work your up the ladder.
Look at the whole thing holistically too: blogging, putting content on Youtube, open source projects, etc, all go towards building your overall image and presence "out there".
One nitpick, the part about comparing possible startup comp in a unicorn exit and as a senior eng at Facebook over an 8 year period is missing the possible tax benefits of the startup comp. Facebook comp will be taxed as ordinary income as the stock is granted as RSUs (basically 40 - 50% in the US in the $500k/year bracket depending on the state you live in), whereas the majority of a $10 million windfall from being an early employee at a startup that exits after 8 years would likely result in at least half of the tax burden if you did it right and the options were ISOs. With a 4 year standard vesting schedule, the majority of options would have vested far before the startup was a unicorn, and the tax burden at time of option exercise may be very low. Assuming then a long term capital gains rate of 15% at time of sale, the comparison to Facebook comp over the same timeline is about 4x in favor of the startup rather than the 2x the article proposed.
As the author says, though, the startup route is exceedingly risky and very highly likely not to come out ahead.
Thanks for pointing this out!
There’s a heavy twin push to find more sources of revenue and to increase taxes on cap gains specifically, so I don’t know that I’d bank on capital gains taxes continuing to stay low long enough to take advantage of them. All taxes on $10M exits are going up; cap gains probably faster than income.
Regarding the rate - LTCG depends on ordinary income level. The 2020 rate for someone earning $150k was 15%, so the $10 million exit in the author’s example would be taxed accordingly. Unless I’m missing something here?
Capital gains "count" towards your AGI, so if you have $10M in capital gains and $150K in wage income and nothing else, your AGI is $10,150,000 and your LTCG are taxed at 23.8% (20% + 3.8% surtax).
Most of the suggestions I see for potential side projects are for some kind of consumer-facing (web/mobile/desktop) app - probably because most people in this context are prioritising the potential of generating side income, but this sounds more like what the author calls "plumbing" style backend/API work rather than something that would develop fundamental CS skills.
So, any ideas? I've seen https://github.com/danistefanovic/build-your-own-x which is a great collection of ideas all based on piercing an abstraction by building your own version of lower-level tools. Are there any other categories of side project that someone who wants to move technically deeper than a full-stack web app would do well to consider?
Nand2tetris is pretty awesome if you don’t already have strong CS fundamentals and feel like you “know how computers work”. If you had a good C.S education though you may not get much out of it.
Here is a cool one I worked on awhile ago when I wanted to learn more about foundationDB: https://github.com/richardartoul/tsdb-layer
A long time ago I wanted to learn about regular expression engines so I wrote a tiny one: https://github.com/richardartoul/regex-engine
I built this with some friends a few years ago: https://hyperdash.io/ (building the backend for this was a good learning experience and I learned a lot about writing multi threaded software making the python SDK).
Those are just some examples to give you an idea, but to be honest it’s hard to give a good answer because side projects are deeply personal.
It takes serious discipline and motivation to spend your nights and weekends writing code when that’s how you spend your working hours as well, so it’s really gonna be about what motivates you and will keep you engaged while also gaining “high leverage” skills (anything fundamental in the realm of networking, compilers, databases, data structures, etc. basically anything that’s not just another language or framework)
For context I studied biochemistry in college with the intention of being pre-med and that is how I did all my studying, creating notes and flash cards for rote memorization because memorizing trivia is what’s required to succeed in that path, but I think it’s the wrong approach for furthering your education as a software engineer.
I still take notes today sometimes (because the act of writing helps me absorb information), but I’d never go as far as making flash cards.
When you’re studying this stuff I think the goal is more like, learn about what’s “out there” so you know enough to recognize that there is a thing whose details you should look up when needed.
Let me put it this way, if you read a textbook cover to cover on operating systems you won’t (and don’t need) to remember every little detail of the data structures and algorithms involved. But studying it once means you’ll never forget that they exist or what the difference between a thread and process is, and the remaining details are always a short lookup away when you need them!
If you do want to go really deep on a topic than my recommendation would be read about it / study it first, then go implement something in that area (even if it’s just a toy) if you want to make sure you really understand it.
It's a spaced repetition flash card program. If you just want flash cards, you use quizlet.
For context I studied biochemistry in college with the intention of being pre-med and that is how I did all my studying, creating notes and flash cards for rote memorization because memorizing trivia is what’s required to succeed in that path, but I think it’s the wrong approach for furthering your education as a software engineer.
Understanding is always preferable to pure brute force memorization. For one thing, going through flash cards will be much faster, easier, and less frustrating.
If you don't understand a concept, it's going to create leeches, which suck up study time.
I still take notes today sometimes (because the act of writing helps me absorb information), but I’d never go as far as making flash cards.
It helps you absorb information and convert it to knowledge, yes. But decay of knowledge is a thing. Flash cards are just the format. What it allows you to do is formulate questions or prompts which allow you to practice active recall. Active recall of information is one of the gold standard for studying.
If you do want to go really deep on a topic than my recommendation would be read about it / study it first, then go implement something in that area (even if it’s just a toy) if you want to make sure you really understand it.
Simply reading is one of the poorest strategy for learning. Active recall is much better. I agree that implementation and actual practice of skill is a good use of time, which might fall under the category of active recall.
Anyway, I am still trying to find how anki fit in my overall system for learning programming / software engineering. One of the thing I lacked is technical vocabularies for describing what I am seeing or doing, which I think anki can help with a lot.
Some people has success with it, but not for me. I suspect that it has to do something with the low density of cards/notes I added to anki.
[0] https://mochi.cards/
That said, I still have basically the same opinions you do when it comes to when it comes to using it for most programming skills. Others have a different perspective, though: https://www.semicolonandsons.com/episode/how-to-learn-to-cod...
Thanks for sharing those examples. I guess the common thread here is to work on _building_ things that exist at lower levels of abstraction, rather than just knowing how to use them as a black box. I guess most project ideas that satisfy that criteria would teach some fundamental skills too.
For me, I started building programming languages (and standard libraries) years ago as personal challenge and to learn more about how various languages work. Later on that branched into emulation (x86/amd64, armv8/aarch64) and more recently databases. (You can find these kinds of projects on my github).
Before that when I was more focused on web tech, I'd build clones of React or Bootstrap or Flask to increase my understanding there.
It helped being surrounded by people with a lot more experience than I so I'd keep being in a situation where I knew nothing about some field and wanted to not be embarrassingly naïve :D so I'd try to build something from scratch to learn it.
It doesn't always work out! An example of a topic I haven't yet been able to get into is the TCP/IP stack. I got somewhere into the IP layer on top of userland raw sockets but TCP complexity and may poor C skills failed me as the algorithms needed for tracking state came up.
Thanks for the examples. I'd never even think of being able to build my own programming language, or clone of Flask - which I guess is the point, I shouldn't treat these things like black boxes :)
Let me explain. I didn’t study CS in college, but I did stud CE, a relatively related field. When I started working as a programmer, I immediately felt that there were some fundamentals I was missing, so I’ve spent a lot of time reading in my spare time to fill in some of those gaps.
There seems to be a trend where someone switches careers, and glorifies the fact that they don’t have a CS background. Why dismiss the history of the field that you’re in? Not everyone has a PhD in CS, but there has been some incredibly important work done in the field, work that we all stand on the shoulders of. Is this an ego thing? It’s hard to be humble and admit that you have a lot of things to learn, so instead you resent the field and blame it for being arrogant?
- linear algebra (transformation matrices and inverses primarily)
- calculus
- approximation methods to get “good enough/fast enough” solutions to the Chinese Postman Problem and the Traveling Salesman Problem
- a self-derived plane sweep algorithm for doing something special with a ton of planar polygons
The only conclusion that I’ve come up with so far is that it either varies dramatically by which industries you’re developing software for, or other organizations have people with specialized skill sets that work out the broad strike solutions to these types of problems before getting the software teams to build the production versions of them.
I completely agree with your last paragraph. I am a backend engineer, a job that at its core involves creating and fixing CRUD apps, and writing relatively simple business code. No matter how exciting people try to make it seem.
So yea, of course data is Created and Read, in that every application maintains data. But that doesn't mean that it's a CRUD app. If you have any where clauses or if expressions, it's not a CRUD app.
Finally, the most popular way of storing data is the relational model. Which, is just math applied to the notion of data: https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf
Maybe if you're building UI-heavy stuff, there's less theory required there?
Some of us realized we wanted to work in this field too late after we had already gotten an undergraduate degree in something else. A big part of the message in my post was that C.S education is important and encourages people to find ways to fill in that missing knowledge one way or another (although I don’t usually encourage going back to get another 4 year degree formally because I think there are faster ways these days that don’t involve losing 4 years of income.)
There was no intention to brag about my lack of education here and I think if you asked most people I work with they’d probably be surprised to know I don’t have a C.S degree.
I know the title is a bit click baitey, but it’s just a hook to get people to read what I think is a lot of practical advice for getting their career to where they want it to be.
I was just making a general comment on the topic. I agree with everything you've said.
I don’t think it’s an ego thing so much as a belief in the power of the rags to riches bootstrapping story arc. In our field, that story is totally doable.
On the “opposing side”, I do see every so often someone without a CS background set out to do something that boils down after not too many simplifications to “First, I’ll solve the general halting problem and then build on that to do task XYZ. Simple!”
But the trend of fetishizing the “bootcamp fairytale” you're seeing is the bootcamps marketing themselves submarine style.
(I am not accusing this author/article of submarine marketing. But swapping the head/subhead would have been more informative and less clickbaity)
Does the author or anyone have any other free/affordable alternatives for BradfieldCS? teachyourselfcs is the only one I can think of which I'm following currently.