please email email@example.com
1) launch a project
2) learn a language
Learning a new language will derail your project completion and launch indefinitely, often permanently.
There is an old quote that when people ask for advice you should carefully figure out what they want to hear and then tell them that.
In this case even more so: if you are starting an open source project I'd strongly recommend optimizing for long-term motivation. Whatever that means in this case I'm afraid I cannot tell.
> Would you prefer to contribute to a Java or a Go codebase?
I personally would have a way simpler time contributing to a Java project than a Golang project.
OTOH, if the project will require heavy loads you might want to consider Phoenix/Elixir. That's would be learning something truly different too.
ACID gives you a lot of nice guarantees and it's silly to give it up if you have the choice.
As for MongoDB in particular, I would never use it for anything. It doesn't seem to do anything particularly well. There are better specialist 'NoSQL' databases that have actual benefits to fit your problem.
Now, there are many use cases for non relational data stores. There are already many answers in the comments but first you have to ask yourself what you need the data store for. In the cars analogy it's where you need to go, how fast, carrying what, etc. Do you need a glorified hash table? Redis is good at that. Do you need very fast queries? You might try Cassandra but be very careful at defining in advance all the queries you're going to run: if you need sorted results you have to plan the columns for them. See http://www.planetcassandra.org/blog/we-shall-have-order/ and remember that NoSQL doesn't always mean schemaless.
Sometimes the choice is about the tradeoffs between the ease of use, installation and planning. MongoDB maybe doesn't particularly excel at anything but you install it with an apt-get (check in advance which version you get) and adding replication is easy. However you better start planning at least a partial schema for your documents quickly or you'll get ton of litter in your database. On the cons side, its native JS based query language is awfully verbose and complex compared to almost anything else, ORMs and especially SQL. Luckily we don't need the console much.
To recap: ask yourself which data you have to manage and why, then google for a database that optimizes your use case and check it against the posts at https://aphyr.com/tags/jepsen which does a super-excellent job at finding out how dbs fall apart in extreme but realistic cases. Often you'll find that a relational database is good enough. Other times you'll have to choose between relational and one or two categories of NoSQL. There are very few mainstream RDBMs but there are zillions of NoSQLs so the choice might not be obvious. Final car analogy: car + tent or camper van?
The real question is:
In what areas are (recently build in the internet era) NoSQL Databases beneficial over (barely-)Relational traditional RDBMS Databases (build decades ago)?
Scalability, the easy to mutate schemas and all that are artifacts of our times.
MySql, Sql Server, etc are barely relational databases, coupled with a almost-decent way to interface them (sql).
For example, in them you can't store a relation inside a field. Schema manipulation is hard. A lot of potential programming power is not possible, without convoluted recent additions the Sql language, or hacking together strings.
And most of them have been made for workloads and scenarios that are at odds to what internet-scale companies need.
Unfortunately the solutions was do "Nosql":
"Any sufficiently complicated database management system contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of a good RDBMS."
Check the relational model. Is far simpler than people give credit, even without get too crazy like some purist want.
In fact, I don't see any reason why the relational model can't be used as flexible how json is applied in the backend.
Despite all the above and more, a traditional RDBMS is solid enough that most people not need to get crazy and move to (full) NoSql. However, could be good to use them in specific cases (like caches, search engines, etc).
But I have experience people using NoSql stores and trying to do the kind of work a RDBMS have solved easier and faster.
The cost: transactions, relations. These are actually incredibly valuable things to have.
If you're storing billions and trillions of records that don't need relations, NoSQL is great. You'll keep your fast lookups and saves no matter how big things get.
This can matter a lot more if you're a start up with the goal of having trillions+ records some day. Your SQLServer will eventually not be able to scale any higher, and then what? Moving to Nonrelational from relational is so painful.
If you come from an RDBMS, you're probably going to dislike MongoDB. I like it for prototyping/MVP but once the schema settles down it's time to move.
However, NoSQL does not start and end at MongoDB, no way. There are lots of different flavours, from huuuuuuuuge key/value stores, to timeseries, to write-one-read-many document stores, to remote syncing mobile app datastores and probably loads of other types that I haven't used yet.
So figure out why you want to use NoSQL (CV building can be a reason too) and play around with some toy installations.
One example from my work is ingesting usage information from a variety of products, like a system that takes in information about all your utilities - power, water, gas, and so on. Each product will have its own attributes that's important to describing it. In a relational world, you might: add columns to your table as new attributes need to be described; come up with some kind of composite attribute system where you try to encode multiple pieces of information in one field; go for a star schema so every product gets its own table; or pivot so that each "record" is represented by multiple rows and the attribute's identifier is a field. Each of those approaches has their ups and downs but they're all present due to hard schemas. In a NoSQL world, a single table can have wildly varying records, each of which is useful on its own without needing to spread metadata into other tables.
- Bootstrap projects with open or changing requirements. A relational model is usually harder to maintain.
- Storing and querying objects with complex structures, such as those received from APIs.
- Having a single programming language across your entire application stack (ie MEAN). Sometimes comes up as a "should" or even a "must" requirement.
- Fast and simple object storage (ie sessions).
I know this is not a good example compared to a production issue, however I think the reducing the amount of time need to get started with a project is very useful over something that needs a lot of configuring before it can be used.
It's very easy to fall into the trap of "everything is relational" or "I could do that with Postgres/Oracle/etc". There are a lot of problems that have good RDBMS centric solutions, but you don't have to look too far to find end users or developers who are unhappy with the RDBMS solutions that they work with on a daily basis.
Honestly, many (most?) NoSQL databases also don't really do them well. If you need these two properties, the only valid choice is really a master-less, shared-nothing database system. E.g. Apache Cassandra.
At some point you'll probably have to deal with schema anyway. If this comes at a later stage, you'll have to deal with a lot of diversity and inconsistency on potentially many points. This can become much more painful and time consuming than having dealt with it from the beginning.
If you're thinking about NoSQL as something like a simpler, modern SQL alternative, you're probably having a faster start and a lot of problems in the long run.
Scalability is something, NoSQL databases have for them, definately.
Search versus query [for some definitions of 'search' and 'query'] seems like a case where business logic suggests an advantage of one approach versus the other.
SQL started getting big because it was the one size fits all approach that worked 90% of the time. In fact it got so big, that universities started to teach only them when they talked about databases in general.
But there are many problems, where SQL is not suited.
If you got hundrets of terrabyte of data you need to analyse, you're probably better of with a Hadoop cluster.
If you need inter process communication, Memcached or Redis is worth considering.
If easy db-sync is your main goal, couch/pouch-db is probably a good choice.
But these three DBs alone are so different, that they can't be compared like MySQL and PostgreSQL can.
That's one of the places where it made sense to use a NoSQL solution. Our documents had multiple levels of nesting, but no joins. We also use MySQL for our relational data, so in the end you have to pick and choose. All of the research we did pointed to NoSQL being a great fit for storing nested documents for stats collection. We haven't regretted following that advice yet.
It's all about trade offs. If you're small just pick the best one for the job at hand. When you need scale you can usually hack either into scaling well enough.
speed of writes, there are no constraints that need to be checked with nosql (typically), it's like writing a value into a hash map. with sql there needs to be a check for multiple constraints: uniqueness, null, datatype, etc. if there's a relation then it needs to check those constraints as well.
the whole thing about rdb's is that they're trying to normalize data where possible, you deal with id's and the fields of the table can change without you needing to propagate these changes to other places. in nosql, if you have relational data then you have to manually make sure all these changes are propagated, pretty annoying if you ask me and quite error prone, you end up writing logic an rdb already optimizes for you. take "cascaded deletes", too, this is manual in nosql.
the best usage of nosql is if you have stagnant data, and you need to write it quickly, take a log file contents, for example, or if your data consistency requirement is not that critical (let's say you implement likes for a web post system, if you're missing 300 here or there, not a huge deal). other cases are things like counters, if you have a game where you're tracking scores, things are changing rapidly , but there's really not a lot of relation with other data, redis is a great example of this type of nosql storage, built in incrementing counters.
most of the time when someone brings up nosql for an application, my initial reaction is that it's a premature optimization, for a lot of data, there are tight relationships and rdb is great for that. but i tend to see that you need both in many cases.
Compare this to an RDBMS-based web app, where to display a blog article for example you'd need to make multiple queries of different tables: first the "article" table to get the text, then the "author" table, then all the comments, tags, images, or whatever. The NoSQL way is much easier to code for this sort of thing. The lack of ACID doesn't matter so much because these kinds of data are usually written just once, read many times, edited rarely, so there are few opportunities for inconsistencies to creep in.
In short: the business wants to deliver fast and the users will use it anyway.
Given web limitations you cant just do the same UI as a desktop you have to be mindful of web browser input idiosyncrasies, screen size limitations, etc.
I've written intranet database stuff, which can be a bit a tad rough and user intensive - but when you are doing more public facing things you have to concentrate on simplification, sanity checks, added security and cross-platform issues. That stuff doesn't always come easy.
Until you get a handle on how you are going to pull-off doing X on the web you can't think too much on how to make it work easier. I think you would see better UX when you have seasoned web developers doing the apps, as they understand the environment and can now also concentrate on UX.
I haven't used Udacity personally but I've used Treehouse and Lynda to learn some specific technologies. I used what I learned to take on side projects and those projects have been impressive enough that resulted in getting interviews and eventually a job with a YC company. (I would also note that I have a four year Bachelor of Science in Computer Science).
I've never considered finishing their courses as a certification that would entitle me to a job. So whether it's worth it or not it all depends on what you get out of it. For me, I wanted to do something specific, their courses covered what I needed to learn to do it, so I took them and used what I learned to do what I wanted to do. What I ended up building with my new found knowledge got me the interviews and eventually a job. So you can say it was worth it for me.
A more typical number among my SaaS buddies is about 18 months of sustained effort until you hit $10k in MRR, which typically is enough (after expenses) to keep a solo founder in the field indefinitely.
The fastest I've ever seen it done is about ~6 weeks for SaaS. Even shorter for infoproducts, although depending on the dynamics of the business that might be "launch one, get relatively flush with money, buy yourself enough time to launch a second one" until you figure out some not-too-obvious things about how to sell them repeatedly.
A consultant, naturally, can hit day job equivalent levels of revenue virtually immediately after hanging out their shingle (if they've got a client lined up). A fairly common pattern is "Inform day job of intention to quit; immediately go back to working for day job as 1099 during transitionary period; start building pipeline while delivering for Client #1."
So far so good, but it confirms me that Europe is slower for firing up a project.
Another 2 years or so of temping, miscellaneous web work, and anything else to pay the bills.
It has now been 2 years where the website is truly my full-time work and I'm looking to hire my first employee in the next few months. Pretty excited about that!
That was a little more than 6 years ago and it has continued to be our full-time project. However we did add versions on most other platforms and a cloud sync service, and I'm not sure that we would've continued to generate good revenue without those additions.
I ended up not using my savings as the business started to grow 1k/month after I quit my job.
For me, the worst thing is siting at the office, doing job for someone else and not being able to care about my project and customers. Doing it full time is a huge relief.
It's only just getting close to something that I can share with people, so I won't be working on it full time in the near future (if ever).
- Google Wave (dead)
- Google talk (dead)
- Google Voice (dead)
- Google trips (...._
If anything, google may offer to buy you out if they like your product good enough. So if that counts as being killed, then yea may be.
As from what the linked article says,
The technique is simple: 1. Get a piece of paper 2. Write at the top the idea or process you want to understand 3. Explain the idea, as if you were teaching it to someone else Whats crucial is that the third step will likely repeat some areas of the idea you already understand. However, eventually youll reach a stopping point where you cant explain. Thats the precise gap in your understanding that you need to fill.
When reading blogs, HN comments, novels etc., I usually read it once just like I'm watching television or a movie.
I don't worry that I read slow since when I've found out that Donald Knuth also reads novels very slowly.
If you want a more systematic reading, there is a book which has been mentioned often here in HN.
> Is there an app that you use?
I use org-mode for everything
 - http://calnewport.com/blog/2012/10/26/mastering-linear-algeb...
 - http://www-cs-faculty.stanford.edu/~uno/retd.html
 - https://www.amazon.com/How-Read-Book-Intelligent-Touchstone/...
If I enjoy a topic, I write down and rearrange chunks from different sources. If you look at the same topic from different books, it's easier to grok that knowledge.
> I read slowly and at the end of a 300 page book I might have only three key ideas that I remember, but I'm able to explain and illustrate them well.
People don't buy brochures, so the writer is driven by the publisher to write hundreds more pages. The market does not reward concise exposition. I read plenty of books with 3 pages worth of ideas and 300 fillers.
I think I understand it more in depth and pay attention to more details than other I've talked to about this. It seems like a forced trade-off to me as I have no choice but to continue this way with reading. I cannot simply proceed if questions are unanswered.
Looking it from an advantage point if the good read is chosen the knowledge is acquired and understood in powerful depth. I guess better teachers we would be.
I highlight important stuff while I read. After reading, I usually create a word doc/ mindmap with the key ideas.
If something is really hard to read and technical I'll read it several times in a row.
I am not a big fan of highlighting, often I come back to a book I highlighted later and wonder what I was thinking back then.
Yep, at least in the US, paper checks for some (still!) and wire transfer for others. You send them an invoice, and they send you an (actual, paper) check or make a wire payment to the account number you put in the invoice. Both should be pretty much free, if you have a decent bank (although some banks will charge a few dollars now for incoming domestic wire transfers).
I think for a yearly charge of $10,000+, it's probably worth the pain in the ass factor to invoice the charge, particularly given how much you'll save (about $300 if you use Stripe, more for others, assuming 10,000 charge). Most banks have banking apps now that let you cash checks using the app, so if you really get going with 10,000 checks flowing in by the batch, you can hire some one to help deposit them via app or dropping them by a bank branch. Not a bad problem to have, if it happens.
Just realize that most companies operate on 60 or 90 day terms, and some even more. You can often negotiate for 30-day terms if they really like you/your product and you're firm about it. Just be sure you factor this into your cash flow. And have a process in place for what to do if you don't receive payment by then.
Actually, regarding Stripe, and I may be wrong about this, but I don't think most companies will let you set up a recurrent yearly credit card payment of 10,000 dollars, at least not without going high up the corporate food chain. If that's the case, you'd need to break it into a monthly charge to go the Stripe option.
Stripe can help you with doing ACH programmatically, if you want to offer an online payment option: https://support.stripe.com/questions/accepting-ach-payments-...
There are a few reasons transactions of this size are almost never done by credit card:
* Cost ($300 for CC, $0.25-$5 for ACH, free for checks)
* Fraud risk: Someone buys your product with a stolen card or without their boss's permission, they can reverse the charge and you have little to no recourse.
* Chargeback rate risk: You need to have less than 1% of your processing volume be reversed to accept major credit cards. With large transactions, a single reversal can put you over the limit.
* Large tickets, and annual billing, are both red flags when underwriting a business for credit card processing.
A business with very large transactions is risky to take on for the merchant account provider, so you may not be able to find one, may not get reasonable processing rates, may be subject to risk reserves that create cashflow issues, etc.
If you go bankrupt and don't fulfill your contract to 20 clients, and all 20 charge back their payment to you, it's the merchant account provider that's now lost $200K they can't recoup. They don't want that.
If you have a major outage and 10 clients charge back their payments, a processor needs $10 million in good charges to balance that $100K in bad charges from you just to stay below their mandated 1% chargeback rate by Visa/MC. That's too much to ask of many local banks and other MAPs.
I find most guides are aimed at beginners following an example, and aren't always the best resource to get through an issue when I'm stuck on one detail.
The alternatives are browsing the actual documentation, which can be hard to navigate when you are still learning.
The last option is to ask questions on coding forums, which is where I have had the most success. The main problem is the asyncronous nature of clarifications or follow up questions.
I'd love an app or site where I can post a question to a forum, with a link to a realtime chat session I can monitor for the next few hours and interact with people interested in the topic / question.
I've had a few great experiences on irc channels where a string of questions would turn into a tech talk by someone who understood things in detail. Or someone bored found my problem interesting enough to walk me through step by step until things clicked.
Maybe your site/app could give users a URL to paste into their posts, similar to people linking pastebin examples. It should handle the creation / removal of rooms and possibly archiving in case people want to save a transcript for reference.
If it focused on doing one thing well, I'd use it. I probably wouldn't switch to a new 'general' forum just for the feature though, unless it had a large community to go with it. (stackoverflow network for example)
Whatever you do, good luck and thanks for taking the time to give back.
Having basically the equivalent of an agent in your corner would be a very valuable service, but crucially this agent would need to have an impeccable reputation, hence any of the usual recruiters only "doing secretarial work" wouldn't work. They would need to be genuinely well connected professionals.
I can see an ongoing relationship with salary increase negotiation support, a bi-yearly in person strategy session ("It might be time to move on") as well as genuinely going to bat for you in terms of your contract ("hey, let'a push for a 7 year exercise window instead of 90 days")
Anyways. I don't know if such a service, but it seems like it should exist.
Go to any meetups or conferences you can find for tech stuff. You'll probably find plenty of recruiters, or at least people who can introduce you to some. I've got pile of recruiters messaging me on LinkedIn, and they almost all explicitly ask if I can point them at any other candidates who are looking. Bring business cards with your email, phone, and website, even if you have to get them made yourself.
In my experience, doing any of this even half-heatedly is plenty to get you so many recruiters that you'll start wondering how to get them to leave you alone after you take a job.
Another way to do it is go on Indeed at look at relevant job postings from recruiters that are well written. I find I can tell right away when they are useless; it's clearly cut/paste straight from the client and has a total "job shop" feel.
I don't know if you'll get an honest answer, but another good sign is that they have direct contact with the hiring manager.
Feel free to reach out, happy to answer any questions.
Thing is, I'm trying to target a certain type of Old Geek. My theory is if someone is 45 years old with solid ReactJS skills, it signals them being an autodidact with experience--the best type of programmer, all other things equal.
If I could build a reputation for interviewing and evaluating such professionals, I could see a fun and profitable business in that.
The Talent Agent for Techies concept comes up 2-3 times a year on HN. As long as companies (with deep pockets) fight over supply, the business model for individuals won't work.
If you're sufficiently motivated, research the small, boutique recruiters that serve your market/industry. Ask around for who has a good, established rep in the space.
Understand that time is money to these guys, they don't cater to job-seekers. Make a friend. You might approach them by first asking how you might be able to help with a potential referral.
I am currently beta testing it with a handful of people but if interested email me at firstname.lastname@example.org
I'm pretty sure he keeps track if I'm still working there, but no phone/mail like "looking for something else?".
Definitely gonna contact him the next time I'm looking for a job.
What do you mean by "electronics". Electrical engineer? Electrician?
Seriously, half the posts on Craigslist are recruiters scouring major metropolitan areas for leads. Reply to enough posts on Craigslist, and recruiters will find you.
I don't know what you mean with "what they actually do". Most people on earth spend most of their internet time inside their business already. I bet they're doing a good work.
Long term storage https://code.facebook.com/posts/1433093613662262/-under-the-...
Like Twitter, I can't but help think that both platforms have become paralyzed by a crippling fear of not knowing what to do next with what they have. To me that means a recipe of slow but gradual decline.
They are trying to create a mobile UI for every small business with Messenger Bots.
They have added ways to send money via Facebook messenger. This is important in places like Israel, where people use Facebook as Craigslist. It's also useful as a payment method for the messenger bots.
They are releasing innovative ads products such as automatic audience targeting (based on the conversion rate of various audiences, which is calculated by just including a facebook tracking pixel on your site, they will automatically target your ads towards the highest-ROI audiences).
VR through Oculus
Better Facebook, Instagram, Messenger, WhatsApp
Leaps in AI
Internet across the world
Their At Work products are being refined all the time.
And as mentioned they have plenty of open source stuff.
What I remember about locking in: instant articles, live video, favor facebook content over external links and some failed apps (paper, notify).
Facebook is the problem a lot of people try to get rid of.
I also would like if messaging would be handled by something like an email address (like Facebook added and then removed once upon a time), or better yet a derivative of email that's easier to self-host and encrypted by default (maybe something like matrix.org).
To me, working to break down the huge silos is the best thing a non-profit social network could bring. And, to be completely honest, I'm not sure I'd even join it, because in this system I'd be able to participate without joining the network so I could just self-host my website (and RSS feed) and use my own feed reader as I do now.
EDIT to expand on this after thinking about it a bit. Since podcasting has been the most successful use case for RSS so far, perhaps a good way to go forward with the above idea would be to allow attaching arbitrary files to posts, and to embed images/audio/video (as they're be embedded on Facebook). This would make it easy to host a podcast/video feed, or image feed on the network while still being a part of the larger open podcasting/video/visual art communities, and it'd be easy to follow. This could provide a decent avenue for advertising the network to certain segments of potential users. And (as long as you embedded items with simple img/audio/video html tags) communities like the free software community and the open web community would probably be pretty ecstatic about it at the very least.
If you're not paying for the product, you are the product. That's why I only use social networks with a realistic monthly/annual fee, like Xing.com or meetup.com.
I think I'd much rather join a network where I'm in control of data. With tech-progress in p2p and the blockchains, I think the building blocks are already present for this kind of a network. If this were run by a non-profit, all the better.
Bonus points for using or interfacing to standards like e-mail, RSS, IRC and the like. Additionally if most of the infrastructure is peer-to-peer. For example a social network based on WebRTC. This way a lot of centralized infrastructure goes away.
I am still quite saddened hat Snake, the cryptographic social network, didn't get the appropriate funding when proposed on indiegogo. https://snake.li/
You can work as a web dev at a small company without being part of the mainstream silicon valley rat race. Sysadmin-type skills are pretty hard to hire for, and very useful at small companies. It sounds like you've got that going for you. I'd change your definition of success and focus on finding a job at a company with a culture you'd enjoy, and not worry so much about its perceived prestige.
Your problem is not with software engineering. Your problem is with interviewing. Don't let anyone (including yourself) talk you into conflating the two.
Technical interviewing process at big4 is optimized for the interviewERs (and the company), and not for the candidate. They have to do that, because their hiring requirements are massive. When you are hiring hundreds and thousands of engineers a quarter, you usually land with the quick, brash process they have currently, despite however well-meaning you are. They can also get away with it, because they have a revolving door of candidates.
Don't let that signal reflect on your software engineering skills. As long as you can solve problems in reasonable time (and 2x is reasonable by many measures), you are good.
If you want to get better at technical interviewing, then use brute-force methods to do so. Find a good source of problems like Leetcode or Interviewbit, prepare a regimen and stick to it. Repeat problems. Do several mocks interviews with something like interviewing.io. You can also use us, of course (http://interviewkickstart.com).
But like others have said, you don't HAVE to go that route. There are companies who do similar level of impactful engineering and make enough money, outside of Big4, who don't have a seemingly depressing interview process.
You are probably here to get some hope. Politically correct it would be to give you that hope because we all know that "Everyone can do and be whoever he want if he work hard". Unfortunately reality is different. Sometimes false hope can make more evil than harsh truth. I am pragmatic that's why i will give you pragmatic answer. You have binary choice. You already know that you struggle with certain things. Give it more time, to the end of the year, so you can determine if the problem was not enough time to learn. If nothing will change then aim lower. If you solve software development problems as you mentioned then you can get into software development.You don't need to work for top 4 tech companies to be happy and solve interesting problems.
But it's possible that you aren't cut out for whatever benchmark/ideal you have in mind for software engineering. If a company is looking for the next Jeff Dean, sure, being not confident in algorithms is going to put you at a severe disadvantage. But there are plenty of valuable and important software engineering jobs -- even within the domain of just programming, nevermind design, planning, management, etc -- that aren't limited to those who can show a mastery of algorithms.
One well-known contemporary example: https://news.ycombinator.com/item?id=9695102
My main job is not software engineering right now, though I do a lot of it on my own (to be better at my actual job). I think I'm similar to you in that I was probably mediocre in comparison to the best of the class, though unlike you, I was probably in self-denial of how mediocre I was. But I eventually got into it much more after working in non-software jobs and understanding how the world works, and that there's plenty of uses for programming beyond the narrow scope of what's taught in CS curriculum. It's equivalent to thinking that you're not cut out to be a writer after feeling mediocre in a journalism news writing class, or technical writing, or poetry.
Some of the best developers I know couldn't pass a whiteboard interview if their lives depended on it. Conversely, the worst developer I ever worked with absolutely dominated the whiteboard phase of his interview.
If I were you, I'd look outside of the big four. There are plenty of amazing companies out there doing some very interesting things. Hell, I work for a company that I guarantee you've never heard of, but I work on the most interesting problems that I've ever encountered.
It'd be like me asking "Is it possible for someone to not be cut out for jogging" and then changing it up to "Does there ever come a point where it just isn't worth it to continue trying to be a runner who can win the Boston Marathon?"
Most of us programmers can't get hired at Google because we don't have the pedigree, the work ethic and other qualities it takes to be at the top of the game. That doesn't mean we don't enjoy and make a living at computer programming.
When you say you had to work harder to get the same result, do you mean the programming or the math? In my CS classes I saw really smart kids who were aces in the theoretical aspects of the program but couldn't grok programming. I also saw the reverse. You will have to be honest with yourself and figure out which kind of person you are and if you are willing to put in the necessary work to be 'big 4' material.
My advice, is keep practicing the algorithms, but do so with purpose. Try to tie in what you are learning with what you are doing at work, or a side-project. The essentials will osmose over time. Learning this stuff without having the proper context to understand is value is difficult ... (for me anyways).
1. Skill at software interviews seems to have zero correlation with skill at being a software engineer.
2. Being rejected for 10 roles is nothing. I've probably been rejected at a rate 5X that. 10X if you count college recruiting.
3. Despite the "shortage of engineers" meme that constantly gets repeated, competition is fierce. There are a lot more engineers that need work than roles to fill.
4. I disagree with the commenters here dissuading you from interview prep. It's worth it to study up on interviewing and do lots of practice interviews.
Keep at it! I've been out of work for stretches up to 4-5 months. It's not unheard of. It's kind of a numbers game. Do 100 interviews, and if the accept rate is as low as 1% you've got the job!
Doesn't mean I'm not cut out for software development nor that I can't deliver value to anyone else.
Nor does it mean I can't find a rewarding and interesting job that suits me and the lifestyle I want.
Just because one doesn't do well under the extreme time constraints of an interview does not mean they won't do well as a software engineer. Honestly, in fact, I think it can be quite misleading because you have both: (1) good software engineers who work best solving problems with plenty of time to think, and (2) "hacker" style programmers that can whip up something to pass an interview quickly but are not actually good at design pattern and architectural type stuff that separates the software engineer from the programmer. Just my 2.
It's of course possible to not be cut out for computer science, or lawyering, or doctoring, or anything else.
But more than mental horsepower, the most important ingredient is desire. What do you want to do?
Not in terms of "I want to be a programmer because it is a good career" but "I want to be a programmer because I love writing code".
It's very important to deeply understand what motivates you, and what you enjoy doing. This might take decades to fully understand, but you must start now.
If you don't love writing code, you will never be a good programmer. If you don't love helping sick people, you will never be a good doctor.
Find what you enjoy. Start there. Doesn't mean you're going to do that for a living, but you can't proceed without understanding that first. And be patient with yourself. It took me 20 years to realize I was meant to program. You might have to do stuff that pays the bills for a long time while you're figuring it out.
But be honest with yourself, try to listen deeply to what your lizard brain is telling you, and then try to find a way to make that work.
Also, there was an article yesterday on HN about how the process of mastery is about memorization and repetition https://news.ycombinator.com/item?id=12508776
You should try doing that. Write an algo one day and get as far as you can without looking for help. When you are done check your solution against some correct solution. Do it the next day again and try to do it faster. Repeat a couple more times like next week, next month and before you know it, it will be second nature.
But I mainly wanted to address the anxiety. Programmers definitely skew anxious; it's a trait that's in many ways beneficial. However, it's easy to let it run away with you. I have been coding since I was 12, and I still regularly have feelings that I'm too dumb to tackle whatever it is that I'm working on. I'm not; I just get uncomfortable when I'm not sure what to do next.
The main way to get past that is by accepting that you have particular feelings in particular circumstances. There's a difference between having a feeling and believing a feeling. If you are having trouble finding that difference on your own, find a good therapist (you may have to go through a few) and work on it with them. At your age I would have tried to macho my way through those feelings, but now I look at that as yet another way I let my reactions drag me around by the nose.
Good luck sorting this out! And thanks for asking such a good question. You've helped way more people than yourself with it.
First quarter 2016, I was laid off from my job as the first engineer/tech lead of a small startup. I have been searched ever since then, and your experience mirrors mine exactly. I have been on over 25 in person interviews and gone through untold degrading whiteboard interviews, code tests, trick questions, and take home projects; all have ended in rejection. This industry has a need to torture candidates because we are all considered to be liars by default.
Much is said about combating impostor syndrome in ourselves but we are too eager to cultivate it in others. It seems people in this industry refuse to understand that some people are not perfect. I never graduated college because I hated it with the very fiber of my being, so I am, like you, not particularly great at white boarding answers to algorithm questions off the top of my head in a high pressure environment. If I need them during my job, I look up answers and learn from people who are much smarter than I am.
My personal identity has been shattered, as I thought my ~5-10 year history of success in the industry indicated I was in demand and talented. I saw posts like this and thought that if the worst happened I'd still be able to find a job. The idea that there is a talent shortage is a lie, or candidates like me wouldn't be treated as I have been. I'm not asking for a free job, or a handout, or a huge salary. I have had a successful career so far and am capable of doing good work.
I have struggled with bipolar disorder and suicidal ideation most of my life. I've dealt with the death of beloved family members and pets over the past two years with only minor lapses in control. Nothing has caused me to consider taking my own life as much as the past 6 months. It seems there is no future for me in the only career I have any skill in and which is a huge part of my identity. And to constantly be told that there is such a shortage of engineers only salts the wound.
If you are expecting things to get better with experience, they won't. It's up to you to decide if you can take the mental strain of continuing in an industry with such inhumane hiring practices.
I've done some reasonably complicated things in my programming career (things having to do with encryption, threading, high volume systems) but I'm sure I'd fail a Google-style CS drilling (and have no interest in implementing a non-cyclical direct graph on the whiteboard :)).
Guess what - hacker rank type challenges I'm semi decent but not great at.
I do pretty good with take home mini projects though and with interviews where even if things get theoretical they are still relevant to the actual day-to-day, like let's say describing the thought process behind selecting a linked list vs arraylist for a given situation etc.
Imo these things come with experience, so again if your goal is to get a job with "google" eventually, start elsewhere, get the chops and go from there.
2) I failed Google's interview 6 times. OK, so I don't work at Google, but I am still a decent software engineer loving functional programming and distributed systems.
There are plenty of reasons that I haven't gotten a job that had nothing to do with me, for example, the CIO already had a third party ready to do the same work or they already had someone at my level of experience and focus.
The only thing that has worked for me is focusing on what I have done, and look for companies that also need those problems solved.
I don't think I'm alone when I say problem-solving even if it's not novel in an efficient way is something most software developers live for.
Part of this is learned and honed with experience. Part comes from a drive to solve [any] problems, even simple puzzles. I truly believe you can learn everything there is to know about programming, but if that's not your passion, you're never going to thrive.
To answer your questions:
1. Your aim to become a top-tier company programmer will never happen at the moment. They only hire passionate programmers who love their work. You can't expect to be hired and then get passionate.
2+3. Stop focusing on study and GPAs. That's done. BUILD SOMETHING for yourself to get some experience doing something you have a vested interest in, not under test conditions. Improve it. Ask other people how you can improve it.
Once you have something that's yours, you might be able to display some passion in an interview (as well as having gained some "real" experience).
If you can't muster even that much enthusiasm for the subject, perhaps it's time to look elsewhere. It's not for everybody.
I can't give you any other advice, except for my personal satisfaction the team I'm in and the domain of the problems I need to solve weights so much more than the specific company I'm working for.
For the technical interviews I've participated, I've always sucked ass. But guess what - those tests don't correlate with success at the actual work any way. They are a gate, but a bit arbitrary one at that. Yes, one needs to understand all that stuff, but can solve them at ones own pace - algorithmic puzzles usually take only a fraction of development time unless the situation is most unusual. If you can solve the problems, then from practical point of view it's sufficient.
On learning techniques, Barbara Oakley's "A mind for numbers" is an awesome book. I'm 36 and I wish I had read it 20 years ago. Slow is not bad, if correct methodology is used to verify learning. Slow can be deeper. Barbara also suggests some techniques for dealing with test anxiety - which I've not tried myself, mind you.
As per yout goal, I'm afraid I have no idea what is possible and what is not - people are complex and unpredictable. But as a senior software engineer, from the point of view of theoretical capability - if you understand the problems and can solve them at your own time, that's quite sufficient.
Don't just look at the top-tier companies / projects. There are many projects/companies where you can learn, grow and contribute.
> 2.) How can I find some positive reinforcement in interviewing / interview prep even if I constantly get rejected? I do perform post mortems on every interview in order to find areas to improve.
Are you getting a positive reinforcement when you are doing software engineering ? That is the key question. If you do, you can have a very satisfying career. Even if you don't work at google.
If you want to make difference, find a small business, no more than 30 to 50 people. The kind of company that wouldn't except a person like you to walk in the door.
Companies focus on these code puzzles and things even when you will literally never come close to that level of code in practice. I mean, I can't even complete the screening challenges Uber gives you but I still found something I can do in the industry. If you are applying for some senior engineer position than you probably need to know this stuff, but if you are looking for a junior role than I really doubt the value of these.
Honestly, I question if I'm cut out for the work I do still. I sometimes just want to walk away from tech and never come back. Today is one of those days that I am questioning WTF I am doing with my life.
2) I think most people in industry realize that interviews don't really correlate well with how well people actually do their jobs. So I wouldn't take rejection too hard. It really is strange that in interviews we test for "can you figure out a non-trivial problem in the time it takes for me to eat a sandwich" when most software engineering roles are more along the lines of "can you work well with others, generate and document clean/functional code, and learn what you need as requirements change".
3) For most things, the best way to get better at something is to do more of it. Interview every single day. Hopefully over time you will get better at it. If you don't, consider seeking help with your performance anxiety. That might help.
Best of luck! :)
1.) Why top-tier companies ? Have you considered joining a startup instead ?
2.) Ask the interviewer. Prep'ing for interviews will not prep you for the work at hand. Try working on your interpersonal skills and getting real world experience ( open source or side project demonstrating your skills )
3.) The recruitment process is broken. When you find that elusive efficient way - make sure to give back to the community.
Also consider an SDET role, those can sometimes be easier to get and then you work internally on removing the T if you really don't like that sort of work.
My 2 cents.
I'm good at grinding away. I'll bite onto a something I want to learn and not let go until I frikkin' get it. I learn with my hands, by asking questions, and staring at the screen until it makes sense. I've learned to push through it, and just write crap tons of crappy code until I come up with something interesting.
As recently as a couple years ago, I had a hard time finding ANY work as a developer. 6 months ago, I finally landed a dev gig that doesn't suck, and my coding mojo has been skyrocketing ever since. I've had code merged into the Elixir code base, I've got another PR waiting to be merged into Systemd, and I'm accidentally discovering use cases for those algorithms that bored me to death when I tried studying out of a book.
If you want to chat, my email is in my profile. I was a technical recruiter for 9 years, and now I'm Sr. Software Engineer (at least in title!). If you have some foundation level skills, there are plenty of ways to hack the interviewing process.
Good luck. If you can't climb someone else's ladder, build your own.
If I interview six people for a position, usually one is really good, four are average, and one is really bad. Guess who is getting the offer? It's almost a paradoxical thing - being average is good enough to keep a job, but you have to be in the top 16% to get a job. Lucky for you, the above average interviewer usually gets competing offers, so that leaves the less attractive job slots open.
If you take six random programmers with a CS degree and <2 years experience, are you the best of those six? If not, you're one of the four average ones, and are not going to pass most interviews unless the market is hot and they desperately need you or you have a friend bringing you in who vouches you can do the job.
You also say you want to "get into top-tier companies / projects". Well, that doesn't mean being one standard deviation above the mean, it means being two standard deviations above the mean.
So now you don't just have to be the one in six that sticks out as good, you have to be the one in fifty that sticks out as great. You know those one out of six quality tier guys I talked about? Now you're competing with just them, and you have to be the best among seven or so of them for the job.
When I was studying CS, I was once assigned to write a homework on the process scheduler for Linux, Mac and Windows. Within 20 minutes I'd know I would have an A on the paper - that was all the study into the subject that was necessary for that mark. But then I continued to read about process schedulers for the rest of the night, because I always wanted to look into it, never really had, and if I was ever going to do it, I knew then would have been the time.
I'm not like that all the time in terms of devotion to learning CS, but if I was, I would have a shot in being one of those two standard deviations above the curve programmers. Because that's what they do, even after they know they got the A on the paper, they keep reading even if it takes hours just so they really know and understand the subject more fully.
In my experience those "not cut out" for software engineering who struggled did so not for a lack of intelligence or learning ability, but lack of desire.
To succeed in this industry you need either be:
1. A "Natural": rare but real people who learn things so fast they don't put a ton of effort into it. They "get it" very quick and find a way to keep current and continue learning ahead of most within their 40 hour week. They spike on something for an hour, comprehend it and retain it.
2. Everyone else - You'll need to work your day job and learn the most you can, and go home and learn more. Experiment, go through walkthroughs/tutorials/courses and consume information. On your own time. Constantly seek out new technologies and methods, build side projects to learn.
Those are the two types I've seen, and I fall into the latter category. I could never be at the skill level I'm at now by just showing up to work. I have a lot of outside of work tech activities and I'll be the first to admit there are many concepts I don't "get" right away. But I keep trying because I'm having fun. The end result isn't as fun as the experience for me.
Of all the people I've worked with in the last 20 years, most of those who gave up were in the same camp as me but either didn't enjoy "having to learn" something, didn't have the personal time, or just didn't want it bad enough.
I know this isn't the most sunshine and rainbows answer but it's the truth. Look inside yourself and ask why you want to do it, and how bad to you want it. Really ask yourself the question "why do I want this?" and be honest with yourself.
For me the answer is "I love building things and solving puzzles" and I want it bad enough to sacrifice a lot for it. When I imagine something abstract and piece it together into something it feels nice. The money is great, but it's not my primary motivator. This may or may not apply to you but if you're passionate and you love it, you will succeed and it will get easier as time goes on. I learn things about 5x faster than I did when I was 2 years out of college. You will too, if you want it.
If you aren't that passionate about it, start thinking about something that makes you feel like you HAVE to succeed at it, at any cost.
If you spend 1-3 hours per day on interview prep you are overdoing it.
Stop it, spend your time doing something else that will benefit you in more subtle ways in the interview and in everyday life, like:* Get in better physical shape (take a walk! go dancing! lift weights! bike around town!)* Hang out with friends, or try to get a new friend by putting yourself into a different environment than you usually are in.The point is to clear some of the anxiety and stress that you now seem to carry, and go into an interview with more confidence and more relaxed.
I too suck at algorithm problems. It is mostly because I fail to see the relevance to the work I want to do, which is to build great software with other devs that want to do the same. The 2-3 times during my career when I've really been confronted with problems that require some clever algorithms to do this, then all of a sudden it becomes very interesting and keeps me up at night.
So perhaps algorithm problems at the whiteboard during the interview is not your strength. It is surely not what the job you are interviewing for is really about either.Just be honest during the interview that you find these situations awkward, and that you perform much better in a real work environment.
Explain what value you think you can deliver to the employer. It might be that you get things done with quality without over-engineering for the future, that you have a solid linux sysadmin background and canhelp out in a web dev team with these skills, and that you have experience of what works once things are deployed. Or maybe that you really enjoy working close to customers, or that you are the go-to-guy when it comes to tool XYZ, etc.
First and forement do a good job were you are now. If your goal is to get into a top-tier company then accept that you may have to change employer 5-10 times before you get there. You must always focus ondoing a good job at your current employer, since the more years in the industry you have, the less algos at the whiteboard during interview counts, while contacts and your reputation starts to weigh veryheavy.
Best of luck!
(As always when answering these kinds of questions you really are shooting from the hip because you have so little information, compared to seeing/knowing someone in real life...)
Can anyone with diligent work ethic and a continual effort into learning find some place that needs their skills? Very likely.How well does your skill set match how broad a market? It depends. If you are narrower, or aim higher, it will take longer to find a match.
That being said: if you have sysadmin skills, have you considered an SRE position? Or DevOps?It may be that you find a better match there.
Find something you enjoy, work on it, don't worry what other people think. People that you want to work with tend to care more about your attitude, confidence, personability and capabilities rather than paper or formalisms. As long as you are learning and pushing your boundaries, you are not wasting your time. Keep applying for different smaller businesses in your area or that you may be interested in: also, in many countries employers may let you come on as a 3-month lower-paid intern then up your salary when you prove your skill.
It seems you have reached a point where you are doubting yourself: this is healthy, but give yourself a break! Look at all you have achieved, focus on the parts you enjoy, and worry about planning a career path after a job or three.
1. No, but you should evaluate how much time you invest in this. (time per year)
2. I hated every time I got rejected. I never did postmortems myself, but swore I would never interview at another BigCo again. But guess what kept happening.
3. I never found a mentorship useful. The best way is to find where you're deficient (which is hard, because companies almost never give feedback). I don't think post-mortems is the right way to approach this -- look at different ways companies evaluate someone (tip: it's not always just the code you write), and see where you can do better.
I'd be happy to answer ad-hoc questions you have -- maybe it would be better to provide suggestions by understanding of your particular circumstances.
Rejections happen. I would try to see if there's a common thema (some area of knowledge that is missing) or if it's just being nervous/lack of experience
Not everybody is good at algorithm problems and there are other areas you might be better suited for
Right. I dont believe in the idea that there are a few peculiar people capable of understanding math, and the rest of the world is normal. Math is a human discovery, and its no more complicated than humans can understand. I had a calculus book once that said, What one fool can do, another can. What weve been able to work out about nature may look abstract and threatening to someone who hasnt studied it, but it was fools who did it, and in the next generation, all the fools will understand it. Theres a tendency to pomposity in all this, to make it deep and profound. Richard Feynman, Omni 1979
I agree with the sentiment. There is much pomposity in the software engineering field and the usual interview process is more like a hazing ritual than an interview so being stressed out about software interviews in general is the correct response.
It sounds like you are a persistent and hard working individual though and those characteristics will serve you far better than being good at algorithms and software engineering interviews. My favorite quote about persistence and hard work is from John Ousterhout
A little bit of slope makes up for a lot of y-intercept
CS140, 01/13/2012From a lecture by Professor John Ousterhout
Do not despair and continue improving. The job part will happen on its own. Trust me, you don't want to end up somewhere that values reciting topics from undergrad CS 101 over the kind of disciplined and hard working attitude that you clearly demonstrate.
The relevant links for where I found the quotes: http://duncan.mkz.com/what-one-fool-can-do-another-can/, https://www.quora.com/What-are-the-most-profound-life-lesson...
The other thing I'll say is that the "big four" companies are glamorized a lot, but each have their own issues. I would say focus more on the fit than the name.
Other tools that are nice are leetcode and hackerrank for practicing. They can offer positive reinforcement because you can see how you are able to solve problems and keep track of your success on those.
I say this as a person who is pretty much in the same boat.
Many companies are starting to value good github profile more than "how quickly are you going to implement the dijkstra algorithm on whiteboard". I believe this trend is better for candidates and companies, so it will continue.
I am speaking it from the point of someone fairly proficient in algorithmic challenges and algorithmic interviews (e.g. top 100 google code jam, worked/interned at 3 out of big 4).
2. Find an interview coach or service that suits you and can help you improve by giving you detailed feedback and concrete advice. The cost of professional help is noise compared to developer compensation. Reward yourself for steady, incremental progress, don't beat yourself up for not being at a specific level yet.
3. Take classes on algorithms and data structures until you can solve problems cold. Master key topics, don't settle for incomplete understanding of your craft. Be curious.
What kind of post-mortem are you doing? Are there particular types of questions that give you more trouble, e.g. tree traversal, recursion, bit math, data structures, OOP concepts/design. If you're having a hard time figuring out what algorithm or data structure to use, you may have to get more familiar with common algorithms, like graph traversal, BFS/DFS, recursion, etc. Once you know the basic algos and data structures, they become your tools and building blocks to solve a problem.
If speed is your issue, you'll need to practice solving problems to train your intuition to come up with working solutions quicker. You will start to recognize problem types and the algo and data structure to use.
Also, being familiar with common data structures like lists, arrays, hash maps, trees and graphs is essential. Know their runtime and space complexities, so you can know when to use what.
Sites like hackerrank are good places to get practice questions.
Hope this helps.
I myself had a terrible time with McKinsey style case interviews, which is sort of a cousin to tech interviews.
As you interact with the market, you're supposed to be understanding better what sills and experiences you should have had. Then you start gaining new skills and experiences to match the market.
If your market is so small as to only consist of a few name-brand companies? Your sample size is way too small. This is a numbers game, and you need to play the numbers -- not try to mold yourself into some candidate some arbitrary set of companies would like. Quite frankly, it sounds like a fool's game.
You're a smart person. Play the game according to your rules, not theirs.
I am a principal engineer at a mid size (~4k employees) tech company (F5 Networks), and if someone asked me to do a bubble sort, or other algorithm from memory I would end the interview there, and have. The CTO at a company I was interviewing at asked me to do bubble sort in less then three minutes, I said no, lets just end the interview loop here. Google almost always asks a pure memory algorithm question, though they have been getting better at remapping the algorithm solution they want to actual work they are doing.
As an interviewee the ability to write out some random algorithm from memory, that I could just google for tells me nothing about the type of work I would be doing, how I might fit with the team, how the team thinks and collaborates.
As an interviewer I never ask this type of question since it does not tell me anything about how you think, work though problems, and collaborate with others. I always try to tie my technical questions back to problems I have had to solve in the past two or three months.
For a Software Engineer of any level your ability to think critically, ask the right questions, and work with others is way more important then your ability to bang on the keyboard in the right order. Syntax and idiosyncrasies of a language can be taught to just about anyone who can think critically and knows how to collaborate with others.
"Does there ever come a point where it just isn't worth it to continue trying to be a software engineer who can get into top-tier companies / projects"
Not if you enjoy doing it. If you do not enjoy it and find the work a constant struggle that you dread facing every morning, then move on to something you enjoy.
Also "top-tier" is rather subjective. I will never work for Google or Amazon. I would prefer to enjoy what I am doing, be able to have a life outside work, and get paid more (At least compared to Google and Amazons average pay in Seattle for the same role).
I see this sort of thing in newer engineers we interview. It's the thing that makes it hard to get to the root of how good someone is.
Right now the sort of challenges the big 4 are setting might not suit you. You might need more experience elsewhere; that's okay, you've got a year as a SE, wirh some good previous background: the future looks bright. It does take a while to get there. I measure myself as successful; at 29 I am a well paid engineering team manager at a largish firm. We do cool tech and I get to promote Devops. 8 years ago I was on a cruddy wage doing very little engineering - but learned loads that set me up for success. Focus on what you can learn right now to make yourself better, add things in increments, don't burn yourself out looking for the shortcut. Most of all don't fall for the hype; there is so much more than the big 4 or a start-up, and they do good engineering too!
For me this is the key sentence here.
Don't worry about feeling like you had to work harder than everybody else during college, that is called imposter syndrome and it's normal.
As for the performance anxiety on technical stuff, I had the same thing. I was even barred from being allowed into programming courses, that I would have to pay a lot of money for, because I failed the aptitude test. I went back in days later and I demanded to retake it after failing and was allowed, and did even worse on the same test.
So I had crippling self doubt. Then given a few years to work on my own stuff, I taught myself C and became the most prolific developer (my work is linked to in other comments I've made on HN if you want to check it) I know churning out loads of awesome software. I even got into kernel hacking in C and stuff. I still don't know if I'm inherently clever or even a good programmer, but I do know I've achieved good results. I think if you're passionate about it you'll find a way to create what is important to you, even if it's very technical.
- Being cut out for software engineering activities; vs software engineering career/success, may be different skills and concepts. You could be good at development, system administration database administration; without necessarily being good at succeeding in any particular type of company culture or organization, applying those skills. Which one is your question: can a person be "not cut out for software engineering", or can a person be "not cut out for success at particular type of company as a software engineer"? [I would give the answer for both a "probably, in principle, but less often than assumed].
- You mention some of your perceived history of effort, success, and lack of success. What about more personal stuff - do you ENJOY the work? Are you attracted to software engineering (however you see it - development, sysadmin, etc)? Would you dabble with it even if you got a job in an unrelated field?
- Do you have a specific filter you might or might not be aware of? Are you seeking specific types of jobs in specific types of companies under specific constraints?
- Do you have friends you trust in similar professions, or with similar interests? What do they say?
- How about colleagues, classmates, profs?
- Number of failures at obtaining jobs is a metric but not a predictive one without context. Skill at interviews is not the same as skill at software engineering is not the same as skill at organizational success.
- Similarly, you may have _perceived_ to be working harder at college; you may have _actually_ been working harder, due to your higher standards; you may have been working harder but _not_ receiving the same results as others - without full understanding I would not automatically put full weight in your perception of relative work.
- Top Companies and Top Projects may not have one-to-one ration. Why do you think you want/need to work for those particular companies? Are you interested in prestige of the name? If not, what is your true interest - type of work? Team culture? Accomplishment? Paycheque? Write a list of your actual priorities, be brutally honest with yourself, and see how they match with those "top-tier companies".
- How would you perceive your skillset at large? Your communication skills, people skills, friendliness, dependability and reliability, loyalty? Personally, I look for a reliable willing learner on my teams more than somebody who can solve puzzles but will cause havoc - different companies have different fashions however.
Either way, best of luck :)
I certainly wasn't a great engineer, and I have never been a natural programmer. But the company I worked at realized that they didn't need the top 1% to build basic enterprise software. Paying a kid out of college 1/5th the salary of a top 1%er, and who a maniac about learning, was pretty attractive to them.
The barrier for you guys is so much higher now, and it's a shame. We need you. We really, really need you.
I think the real question is: do you like building real applications? Algorithm questions are wonderful intellectual challenges, and useful background knowledge. But most engineers I know spend 90% of their time figuring out why something wont compile, trying to integrate with crazy APIs, or dreaming about how new technology X will fit into the stack. Worrying about whether the hash table Java uses is O(n) or O(1) is very low on my priority list, and something hard to justify to bosses and customers who care about a shipped product more than microseconds of optimization.
Take a break from programming if you can. Get a job in retail, and experience a different form of suffering for a while. Or join the Peace Corps. When your brain gets rested, find an open source project that interests you, and contribute to it. If you can't find one you like, or find that it bores you to tears, consider another profession. There's no shame in that, the world needs doctors, lawyers, chemists, business people and barristas as well.
Performance anxiety is just something you have to get used to dealing with in some way. You can always just ask questions during the interview.
Have you been evaluated for ADHD? (PsychD with the long paper test & blinky box with clicker, not necessarily MD with the "Ask your Dr about Adult ADHD" screener).
You might not have the stereotypical symptoms of ADHD, but the executive function hit (and unconsciously compensating for it) can lead to symptoms that resemble a lot of the things you mention in your background: feeling like you have to work harder than classmates, having issues with algo problems, performance anxiety, and needing 2x more time on some problems.
I mean, aside from school, you are clearly smart enough if you can do full-on sysadmining (debug and solve problems, not just follow tutorials) and use code to solve project euler problems. Why not make sure you aren't handicapped in a way that's totally treatable?
Of course, this could also just be graduate nervousness and insecurity that can be overcome with practice and experience, but I wish someone had mentioned this to me when I was mid-college so I'm mentioning it.
Disclaimer: I am not a medical professional, this is from personal experience and comparing notes with coworkers with ADHD. YMMV.
I think the most important part is if you are interested in software engineering and find coding fun.
Life is long, and you have many, many years to get "successful" still. But there is a large chance you are more successful than you think.
As for tech interviews, it is a skill that can be learned. Things like hackerrank.com, but also just getting more work experience helps.
You're shooting high and dissatisfied that at 1 year out of college you're not 'there' yet. Regardless of your interview performance or speed with tech challenges, you're still a 'junior' (not a great term as it can seem insulting, but it's what the industry uses) engineer.
Your question is more "Is it possible for someone to not be cut out for super-prestigious software engineering?" Which is much different. If you want it you're going to have to work hard for years. Wanting it for the sake of the prestige (which is the vibe I get from this post, sorry) is not enough.
Why do you have this "if I can't make it there, it's just not worth doing" attitude? Do you have to be heads above most engineers in order to feel ok about yourself? Listen: all around the industry people need software engineers. Serve your purpose as a diligent engineer.
Just: do good work. Then do more of it.
Solve 100s of these problems(start with easy ones and move into harder ones at your ease, learn new concepts and algos as you go) and try the interviews again in another 6 months. I promise, you'll improve a lot at this kind of problem solving. I've seen a number of people do this and succeed at algo interviewing game.
Not everyone can prove their real skillset to the Facebooks of this world in an interview, with very little SE real world experience. You don't need to aim so high to enjoy your job and learn a lot.
In my country it is really hard to get a decent job without an M.Sc. I know a lot of people with two M.Sc.s in their pocket (this means at least 1 B.Sc. + 2 M.Sc = 7 years of academic education, like myself) speaking 1-2 foreign languages and having 6+ years of real life experience at the age of 30. And some of them would like to work for the "big four", and maybe in your country. Whether you like it or not you compete with them.
 One of my friends who is IMHO a genius got a job at Google in Zurich and he had a hard time at the beginning.
I don't know whether joining the creme de la creme of the industry is possible for somebody who has some trouble with algorithms and the like. it seems a pretty essential differentiator. I'm not very quick when problems get harder as well. But you know whatever. i still eat and i own my home.
And don't worry about your speed or performance. I'm as slow as hell and manage successful projects, very hands-on. Find your niche, and don't expect to be good at everything.
> I can solve most problems correctly given enough time > (usually 2x+ longer than interviews).
It probably won't get you a "big 4" job, but you might experiment in some future interviews with being transparent about the conditions in which you can solve such problems. E.g., "Give me three hours in a room by myself with paper, pencil, and a disconnected laptop running $MY_DEV_ENVIRONMENT, and I will be able to work it out."
Overall I might not necessarily "talented," but I certainly enjoy my side projects, have looked for jobs in different areas of work, and try not to shy away from my opinions.
Your comments are varied and it is difficult to fully understand your perspective. Nonetheless, I greatly recommend finding two things: the things you love about software engineering, and the things you believe you have done well within the field.
Capitalize on those things!
but perhaps you might want to do a bit more math + physics studies (online, books etc..) it helps you with formulas and thinking a different way which helps IMO with programming.
Lastly, use a rubber ducky when programming :).
If it's just doing interviews I would recommend going to a doctor and maybe getting prescribed some beta-blockers. It should calm your nerves enough you can focus on the problems at hand.
1) Many people live great fulfilling lives not working at AmaGooBookSoft. But 1.5 months 1-3 hours of time isn't a huge commitment. Also consider that you might not be studying well. What types of questions are you being asked and how are you studying?
2) What are the types of things you decided to improve on?
Yup, I'd say if that's your goal, then you're not cut out for it.
That's like saying you want to get into stock car racing because you want to hang out with Danica Patrick. You're doing it for the wrong reasons.
You have to love it for the joy it gives you to learn it and use it. Otherwise you won't spend the necessary time to be truly good at it.
On the bright side, you might very well lead a more balanced life outside work. It's also not realistic for me to make an assessment of your choices but you should honestly answer these questions for yourself.
If you answer one No, then you should move on.
If you can answer Yes/Yes, then you should continue. I suggest that you stop interviewing. Your negative experience is hurting your attitude.
Start with what you know.
- Does your current company write software? Go help them write their software.
- Do your friends work on software projects/companies? Go help them write their software.
Search youtube for Neil deGrasse Tyson on dyslexia
Would knowing that you have it down pat make you more confident?
Do you like this stuff? If you don't, you can always do something else like sysadmin or devops.
Have you tried asking in advance of an interview for a few extra hours to do the task(s)? I think this is a totally reasonable request to make ahead of time. Plus, any company that thinks a hard time limit is necessary to evaluate your skills is not going to be worth working for.
There are many options in life and computer science is not for everyone.
The real question is do you have passion and innate motivation around it? If you can earn a CS degree and you have the passion then relax. You just need some time to get the interviewing figured out.
It's not about whether you are "Cut out" for it or not.
The most important question is: Are you doing what you want with your life? And is your current path helping you get there?
Another user suggested, that you might not even like software engineering. Sit down and seriously ponder that.
Practicing basketball for 8 hours a day for 10 years doesn't guarantee you'll get drafted to the NBA.
If you enjoy it, recognize your limitations and try to figure out a way to make money doing it, but don't assume you're going to be a rockstar just because you put in the time.
It sounds like you are running into problems with performance anxiety in interviews. Fix that.
Mate, fuck what anyone here says, with enough dedication you can do anything you want.
With that out of the way, fuck the big 4s as well. Working there imo is overrated. However, what I would say is you should work on smaller companies and focus on your career path. If you aren't learning at a company then you should be leaving. You can always keep eyes on job posting at those big 4s and develop skills at work or at home that you need to get in.
Just to recap, fuck the big 4s and given enough dedication and hard work anyone can do anything they want. Its not rocket science. heck you can even learn rocket science, there are many resources online. Knowledge is everywhere.
It also takes time to become good at it. I was pretty useless the first three years of my career.
2) you have done enough prep. Get some real world experience.
3) make them want you. Establish yourself.
terminology like "big 4" is quite telling. you are competing with people who do not view this industry as a stepping stone to high social status, and that is why you are losing.
- Working harder than others in college. I don't find this to be a particularly useful guide for anything other than your work ethic. You had a respectable GPA and were willing to spend 60 to 80 hours per week on schoolwork. So what if someone was able to eek by more easily? Maybe they had a leg up on you and got into it earlier. Maybe they wouldn't have put in that time if they needed to.
- Rejected interviews / performance anxiety / bad at algorithms I can't speak to working for "the big 4". I haven't had any interest in doing that, myself. There's plenty of great jobs out there at smaller companies (including startups). If you know you're bad at algorithms, start studying. Grab the ones from interviews that you've been bad at and learn them up and down. Write example libraries of each in a few programming languages. Put them in a GitHub/GitLab/BitBucket repository. For the languages you're targeting jobs in, find an open source project in the language that has a good community and participate. Find a library you wish you had and write it. Put them in a repository.
Failing at interviewing at a top-tier company may be an indicator that you're not cut out to work at one of those top-tier companies. This sounds worse than it is. Maybe you wouldn't thrive in that environment as much as you'd like to thrive? Wouldn't you be happier with a job at a smaller outfit where you can grow, or maybe just a different outfit? If Google/Facebook/whomever else you consider top tier is proving too difficult to get in to, look elsewhere.
I mentioned the whole repo thing and this is advice you'll find all over Hacker News and elsewhere. It's not an industry fairy tail ... it works. In your cover letter, specifically mention your experiences with the languages they're looking for and link to relevant projects. In your resume, provide a link to your GitHub ID or relevant ID on another site that has a list of your projects. If you're lucky, they'll have already looked over some of your code. But don't count on it.
Having that available gives you the opportunity to creatively deflect those technical questions. Remember, they're asking you to demonstrate your knowledge. Just because they gave you a whiteboard doesn't mean you can't demonstrate it differently. Three years ago I took an interview and was asked something algorithmic around multi-threading. I had written a library in a private repo that handled message passing between two applications running on the same machine in a thread-safe manner and was directed to the white board. I said "I can do you one better" and mentioned a library I had written for thread-safe in-memory message passing between two applications running on the same machine where I not only had to solve that problem, but had to do so very performantly and had to address a number of other corner cases. The interviewer let me log into my BitBucket account, plugged his laptop into the meeting room's TV and after a quick apology about the code quality (it was actually pretty good, but not perfect which was why it wasn't public, yet), I showed him the solution. The upshot was that the entire rest of the interview was me walking through this code. Why did you use a Mutex there? Why a ManualReset there but an AutoReset there? It was a lot of fun.
1) Yes. When the benefit of getting into a top tier company outweighs the grief in trying to get there. Maybe you're there, maybe not? Ask yourself why you're focusing on these specific top-tier companies and find out if there's a company not currently in your list that may fit those criteria would be my only advice here.
2) You're already doing this. Post mortems are a good idea. Another thing you can do is join some meet-up groups that have professionals in the parts of the industry you're trying to get into. After you get to know some people, you'll find folks who do regular interviews. Ask them to help you. I used to give a lot of interviews and I have volunteered for interview prep many times. A lot of anxiety around interviewing comes from social anxieties in general. Joining a meet-up group will give you practice at introducing yourself and making a good first impression. Walking up to random strangers at the super-market and striking up a conversation works, too (I've done this as practice, my self).
3) My last two answers are my best advice. A mentor would be helpful, but it doesn't have to be such a formal mentor/mentee relationship. Get into some user groups/meetups and meet others in software development who are where you want to be. Make friends and those friends will become your mentors by default if you're willing to seek advice, ask for help, and accept hard observations you may not want to hear.
And, most of all, hang in there. It sounds like you really like doing this stuff and want to do it. You're already ahead of most of the people I used to interview. Granted, it wasn't at a top-tier company (though we were a huge internet company) and it wasn't for the sexiest of development jobs (because that kind of attitude would have had you hired pretty easily if you were even close to qualified where I was at).
 This interview found me. I wasn't looking at the time but my dad's advice of "never turn down an interesting interview/opportunity" stuck in my head, so I was very casual in this interview. That turned out to work in my favor for whatever reason and I ended up being offered the position at a salary figure I had never expected to get. I didn't take the job because it required moving out of state and that wasn't an option for me at that time.
 This sounds really arrogant and I'm embarrassed to say that those were my exact words. It could have easily been off-putting to the interviewer and I knew that, but because of the last footnote, I was overly casual and confident (if I didn't get the job offer, who cares, I probably can't take it anyway!). The funny thing was, this group of people went from extremely formal in the beginning to casual by the end. I felt like we were having a discussion like I'd have with other developers over beer, not like I was having my knowledge put to the test and when the "thanks/hand-shakes" happened at the end, one of the guys said something along the lines of "Thanks for your time, I really enjoyed this interview" to me, which stood out since I can't remember an interview experience that equalled it.
 I picked a perfect library and I ended up using this library in two other interviews as example code. It was a tricky bit of logic where you had two applications, each in different security domains with both responsible for processing some data and one responsible for requesting and writing the data. They used MemoryMappedFiles to share the data between them and had to manage situations where either side may not be in the position to be able to receive the data, so it covered a number of scenarios neatly in one library and made message passing with these odd requirements a simple matter of a few lines of code wrapped in whatever threading construct one wished to use.
Maybe, though I don't think you're at that point yet. More specifically, though, you may do better to simply let go of this idea that you need to join a "big four" (or "top-tier" company in any other sense) in order to feel like you've reached your potential (or are on a safe track to it). Why? For one thing a lot of people who "make it" into those companies report back that (apart from the prestige) the experience just wasn't as rewarding or interesting as they thought it would be.
But even more fundamentally: After all, you have to remember that none of these companies were anything like what our image of them is now, back when they started. And they certainly weren't "the companies to go work for and make a name for yourself", back in their very early days.
Point being: rather than chasing after the coattails of what other people have done (and which society later deemed to be great), you may do better thinking up something you can do that will great, and make it your goal to bring it into reality. And by definition, its potential greatness may lie in the fact that it just isn't seen as "great" by a critical mass of people yet (or because it simply raw and unfinished, and waiting for someone to come along and provide fresh interpretation and perspective -- someone like you, perchance).
BTW, there's an obliquely related quote from Jamie Zawinski about running after "success", and where you end up as a result:
And there's another factor involved, which is that you can divide our industry into two kinds of people: those who want to go work for a company to make it successful, and those who want to go work for a successful company. Netscape's early success and rapid growth caused us to stop getting the former and start getting the latter.
Things are rather different nowadays, and I wouldn't say that working for Google or FB now is anything like working for the ticking time-bomb that was Netscape in 1999. But, existentially, I think there's a similar lesson to be drawn from being obsessed about joining something "great" versus... doing something great.
And what's interesting about JWZ's is that, while he appears to have made out well enough for the years in the tech industry -- where he ultimately succeeded was in defining "success" on his own terms, even if it meant doing something completely different (running a music venue), even if was guaranteed not to make him rich or "influential" as certain other people with whom he also worked at Netscape, and who we hear a lot more about today.
2.) How can I find some positive reinforcement in interviewing / interview prep even if I constantly get rejected? I do perform post mortems on every interview in order to find areas to improve.
Fundamentally, we can only find positive reinforcement from within (and from helping others) -- not from other people's evaluations of us.
But in regard to interviews, it may help to remember that these are largely bullshit. Basically we're in the midst of a long-term speculative bubble in regard to the supposed potential of certain cargo-cult interviewing techniques (hashed out in the past few years in folkloric fashion) to assess people's inner qualities, and predict their potential for "greatness." Which basically seem to operate on the principle of, "Well we asked such-and-such questions before. So let's ask 5x as many, 10x harder. That'll get us people 50x better."
All of which are fundamentally, hopelessly flawed: not (just) because the questions are silly, and increasingly have become tests of rote memorization.
But because you don't do great things by "being" great, or simply by finding "great" people. Great things are accomplished through great ideas, and from the courage (and strength) to pursue them. And because you're pursuing something you believe in -- not some random goal that someone else put in front of you.
Focus on these qualities, and you'll have a much better shot and ending up where you really want to be in this life.
> Is it possible for someone to not be cut out for software engineering?
The answer to such a question is always 'yes'. But there's a lot of danger in assuming that you are the someone. This is betting against yourself. And there's only one of you in the current reality state. Don't bet against yourself. That is not how you should think.
Definitely don't bet yourself in this instance if you already have experience successfully getting multiple jobs...
What you should investigate instead is what do you want, and how much you want it. Consider the various pros and cons and how they make sense to you. How much do you really want to work for a Big 4 company? How do you feel about some of the potential tradeoffs (i.e., time spent on learning algorithms and interview questions)? Same with the software engineer question. How much do you want to be one? Why? What are the tradeoffs?
[Note: not all tradeoffs are "true" tradeoffs, i.e., that you'll loose something. Learning algorithms may make your mind sharper and help you in other areas. But it also means you can't spend that time on, say, relationships, entertainment/hobby, or even something in the health department. There's nothing wrong with tradeoffs and don't scrutinize them too much but still be aware that nothing you do is free]
The problem with the question of "am I not cut out to be a software engineer / Big 4 employee" is that no one can answer it, including you. You will, most likely, never ever know unless you reach some success point where you can definitively say yes. You can't just base it on things like being rejected by many companies or struggling in college, because that already implies those are reliable proxies and that's a really shaky assumption. I had trouble in college, too. I graduated with a 3.0. It doesn't seem to mean a thing, other than what it literally means.
> So far, I have interviewed for and been rejected by no less than 10 different roles. I was also rejected by approximately 20 companies during college. I always fail during tech portions.
This is neither here nor there. There are a lot of factors that could go into something like this, it could be way too many things. Not enough information. The only thing I'll say is try to develop a model of what kind of companies you are not a good fit for, so that you don't spend too much time on them, and avoid wasting too much time on unlikely pathways unless you really want to work for some specific companies. I would often apply to very few places, get offers from all of them, and then choose among that. Applying to lots of companies indiscriminately was both stressful and yielded nothing. Also, don't be discouraged from applying to places that have requirements you don't meet but are nonetheless interesting to you.
Also, field, location, frameworks, what the company lacks, how the company is doing, etc., all affect your chances.
> performance anxiety
I got rid of my performance anxiety mostly through a major philosophical shift. I don't know if this is a topic that one can give "simple" advice on... in the context of interviews, for any given interview, assume that you will pass it. Just assume this, without making anything depend on it being true. Any time something in the interview goes "wrong", just assume it doesn't matter. Don't think about how you "should" know the answer to some question, just give your best answer or say you don't know and move on and do not assume that this jeopardizes your interview.
Whether you did something "wrong" during the interview, you can figure that after it is over. And, remember, they're just interviews. You do not owe to the world to pass them, they don't say something insidious about you, you're not a worse person for not passing one, nor are you a worse software developer for not passing them. You interviewing for your benefit, not theirs or anyone else's.
> If my goal isn't an impossibility, how can I efficiently progress towards it? Would a mentor be helpful?
Assuming you do decide that getting into a Big 4 company is a fairly high priority goal for you (and, really, even if it's not), the first thing I would recommend is making sure that you're focusing about progress and results as opposed to time or work. You want the most productive results from the least amount of time and work. All work should be justified.
Essentially, you're trying to learn how to solve algorithms quickly and under pressure. As with any learning tasks, this is a fairly big and complex topic that's not well understood. This is where you want to apply your learning how to learn skills and try to pool whatever intelligence, intuition, and knowledge you currently possess. I can write, well, a lot on this topic so I'll try to keep it relatively short: try to figure out what is needed and what is missing in your head, and try to find a way to process your learning style and what kind of things give you trouble. Grinding on a problem over and over actually probably benefits more brilliant people more than the slow ones among us, since the brilliant people can make their brain form all the connections, we actually need to trace what goes where.
Maybe you have a poor memory and you need to organize the algorithms you're learning. Maybe you're not used to writing code a certain way and you need to do that. Maybe you should take a stab at some weird language to free up your brain from misconceptions. Maybe you should play a video game to see some pattern you've never paid attention to before. Maybe you should get some sleep and stop worrying about things for a week. It's a bit of a strange process at times but it's not entirely hit or miss and if you are very attentive to your brain and you do not waste time shaming and guilting yourself, you can discover a lot of interesting things about how you work, whether or not you'll make it into that Big 4 company.
I can write more about this but it's not going to fit in an HN post.
Just, don't bet against yourself.
Are you not cut out for software engineering? You've already been doing it for 1.3 years, there's no reason for you to think that.
Are you not cut out for being a high-quality professional? That sounds like a yes. But it's all about your mindset, not your skills. Your skills are just fine, but your mindset is much more important.
You need to ask yourself what you want out of your career. I say that rhetorically because It's pretty clear from your writing that what you're looking for is an external perception of status. The thing about status is that the people who chase it above everything else will never, ever get it, and it isn't worth as much as you think. Who exactly are you trying to impress with this status that you're looking for? If you manage to get it (not likely), and these people are actually impressed by it (even less likely), will you feel good about that for more than 5 seconds? I'll let you guess the likelihood of that.
The thing about jobs perceived as high-status is that so many kids are desperate to get them that any one person will have a very hard time getting them, and the people who do get them tend to get treated like dirt, because the companies know very well that there's a line of people down the block ready to replace them if they displease their management in the slightest way.
You're not gonna get that kind of status with your job search. What you can get is a solid, upper-middle class salary, a good work schedule, and respect that you have earned with your productivity from your co-workers and management. If that's enough for you, you can get a job like that very easily.
I never got a CS degree, and have never really gotten good at the fancy algorithm type of problems that some tech companies like to use in interviews, and that you seem to be sweating over. Yet I just finished a job search, got multiple good offers at once, and accepted a good job with a solid company. How? I never bothered trying for any of the big-name companies, and am perfectly open about what my skills are and aren't. There are tons of good jobs out there that want people that can solve real-world problems instead of academic exercises on whiteboards.
And that's where real status comes from. Having a solid job that you're happy and successful at is real status for adults. Just wanting to have Google or Facebook on your business card is for children.
Not that there's anything wrong with working for the Big 4. But do it from a position of strength, i.e. you're already a strong, confident professional with a lot of value on the market, and they better give you a good offer and not jerk you around on the interview process because you have plenty of other potential employers to choose from.
Free screen readers:
VoiceOver (built into macOS / iOS)
I don't know what is the status for fingerreader ( http://fluid.media.mit.edu/projects/fingerreader )
Also have a look at HandyDV Linux (https://handylinux.org/index-en.html). The aim is to offer for visually challenged and blind people an accessible computer. A french guy is beyond it and there is a kickstarter-like compain to support it (french page about it http://linuxfr.org/news/financement-participatif-de-handydv-..., couldn't find anything in english).
Open source screen reader: NVDA (www.nvaccess.org)Industry standard screen reader: JAWS (www.freedomscientific.com/Products/Blindness/JAWS)
I detect you're a non-native speaker. A noticeable accent is going to be bigger problem if you're gunning for executive management than in tech. I'd invest in some language coaching.
1) Only do the eMBA if you can get BIGCO to pay for it. Price is unreasonable because it's expected to be expensed to an employer and it is a serious time commitment. I don't think it'd be worth it unless BIGCO is invested in you enough to sponsor.
2) 11-12 year experience upon entry is late for full-time MBA (mean is 5, max is 13). The MBA won't give you the boost to executive management - no one hires fresh MBAs for exec roles. MBA or not, that'll only come from hustle.
3) No empirical data, but my working theory is f(work incredibly hard, be kind to people and foster both friendships and partnerships, always be seeking out opportunity)
Misc: the coursework can be really useful/fun depending on the program. For example, Wharton lets me do the coursework equivalent of a grad degree in statistics w/i the mba. Lastly, the ready access to such a diversity of smart, ambitious people mid-career is really cool.
Happy to chat further if you'd like or put you in touch with MBA or eMBA students/adcom folks.
There are a few worthwhile reasons to get an MBA, but one really trumps the rest.
As some others have said, the overwhelming value of an MBA is to build strong relationships with future business leaders. End of story. If you don't want to spend 2 years doing that and pay for it, don't do an MBA.
Those I've talked with that did an eMBA mostly regretted it because they were incredibly busy, and barely had time to meet anyone in the program, let alone build strong relationships with them.
If you don't have much background in management or business (most of which you can get from reading books) the course material will be helpful, but you could just as easily learn it on the job - if you can get the job. That is the other reason to get an MBA; to get into a company who requires it, though these are increasingly become less mandatory.
There are many answers to the question of how to get to executive management, but I think a very common one, which is likely to work for most people is the following: work at a service provider which gives you some strong functional/business skills (e.g., consulting, investment banking, equity research, marketing strategy, etc.). Do well there, but don't stay too long. From there, take a middle-management role (e.g, director, VP) at a corporation that is growing fairly quickly. Make your way up, and probably switch to another firm if you're not advancing quickly where you are.
Be careful of the trap of not having operating responsibility - you won't have this as a consultant or investment banker. If you don't have experience owning a P&L, you can't be trusted to do so even if you smart and capable. You could be in corporate strategy, corporate development, etc. but those are not true executive management roles.
Wow that went longer than I intended so I'm going to stop rambling.
In my country, you need an MBA to get into mid-upper level management positions just because almost everybody is having one just to differentiate from others.
The cost of getting an MBA - paid by you - is nearly the same of running a business for 2-3 years. And it also reflects you have knowledge about managing business when your own money is at stake.
A lot of people wants an MBA for the connections: get an MBA because you want to hear and discuss a lot of different points of view o a lot of business subjects in a short (1 year) time. Connections are useful if you can make use of them (like making business together with other people).
Since the goal is to network, you want to maximize your time there. I'd elect to go through the full 2 years.
Am I the type of person that embraces new opportunities and takes risks with my career?
At the time, I think the answer was no and as a result, business school worked out great. It introduced me to new career paths, brought in companies for me to interview with, and helped me engage with individuals with vastly different perspectives than my own. If the answer would have been yes, then business school would not have been the right choice. I was 26 when I started business school (pretty common age), and a person's late 20s is one of the best times to explore new directions and be creative with their career, since you already have some work experience and capital, but likely no children. The 2 years spent in business school (or 4 years if, god forbid, you go the consulting or banking route) is valuable time that could be spent taking bold risks.
If you believe that, then to answer your questions...
1. No, an eMBA does not make sense because you are both allocating your time to business school, which can help you identify new career opportunities, but you are also locked in to the company that is sponsoring you, so you aren't as free to explore elsewhere.
2. If you are already making $150k+, then there won't be much impact to your life until you make $1M+, so the salary difference shouldn't be factored in one way or another.
3. What do you mean by executive management? Different executive roles require pretty different career paths, and becoming an executive at a large company is probably 10+ years out, which is likely too far to really plan for.
Hope that helps. Good luck with your next steps.
I also didn't get a pay raise, and I didn't use the connections I made, but learning the material was extremely helpful: market forces, positioning, statistics/analysis, strategy. I still skim email newsletters I get from McKinsey & Co. / Wharton a few times a week, and HBR has some incredibly good articles every now and again.
Source: C++ developer with MBA in marketing.
I currently study optimization and machine learning, and in the future I'd like to lead a team of people studying similar topics. Initially, my goal was to stay an academia and become a professor, but now I believe I'd like to be in industry doing similar tasks.
"Who needs Harvard Business School when you have Silicon Valley Business School."
To be fair, I'm most likely paraphrasing. That being said I only have a GED/Some College experience and I've made it into Product Management.
1) Yes, if you have an engineering degree. Business is like another language so there is jargon in accounting, marketing, finance, etc that you need to learn. If you are not getting that at work, the MBA will at least enable you to understand "executive-level" conversations. Most of them are common sense (you can pick it up from context) but it is way different if presented to you in a rigid, structured, organized fashion vs listening to random conversations. You can obviously learn this all from Khan Academy ...
The other overlooked thing here is the people that you meet. On the more expensive programs (>$100k+), the pitch will be you will meet the same quality people as you (same aspirations) and that is true to a degree as the quality of your education will be partly affected by who is in your class. Make sure you go the MAIN CAMPUS of the school and not a off-campus thing. I personally felt the on-campus experience was great (we have a good football team so that helps)
2) When I did my eMBA (graduated in 2004), the salaries were around $80-85k. I realized that most of the people in the program were making around $40-50k and hoping to get that bump. I was making about $150k/yr at the time so this wasn't really the reason why I went to get my MBA (it was to get a U.S. degree) so you will just get some funny looks when you tell people you don't have any interviews set up. Most BIGCOs (specially consulting firms) value an MBA, I guess because they can mark up your rates.
As an engineer and a TECHNICAL manager (not just a "manager"), you will most likely make more money than 90% of the MBAs even without an MBA. Salary is NOT one of the reasons you are doing this.
3) Getting into executive management is more about opportunity and luck. You could be the most qualified person in your company but there only so many seats to go around (1 VP Eng, 1 CTO, etc.) so you may have to look elsewhere. An MBA will certainly help but it will NOT be the main reason you get there. The MBA just lets people know you have met a "bar" (like "ok so this guy knows the basic business stuff") so they can check that box off when shortlisting candidates. At the end of the day, it will be how much value you can bring to the table in totality. Executive management is less being a "manager" but being a "leader" as your role will have a lot more impact in the company (in a normal, sane, non-dysfunctional company) and you will have to think more strategically. The MBA will have courses in "Strategy" that will allow you to have some structures, words to communicate in your head when you present your plan to the people. You can have all the strategy in the world but if you cannot communicate it in a structured, organized & impactful way, then you will not get the job. It's not just using BS buzzwords but really making the board (or CEO) imagine that you are ALREADY in executive management.
a) Because you love to learn something new <== Good reason, albeit expensive. You can read the books or do online classes.
b) Because you want to make more money <== This is possible, but it's not guaranteed, especially at the level of incomes you already have.
c) Because you want to have a diploma on the wall <=== Questionable reason, but hey, who am I to tell you how to spend your money?
d) Because you want to broaden your horizons into areas you have never stretched into (private equity, investment banking, Marketing, strategy, M&A, etc etc). <== Good reason. If you love it, and you end up getting well paid for it, awesome.
e) Because you want to go into a different career path <== Excellent reason. An MBA gives you many choices, not all of which lead to higher incomes, but it opens doors to different career paths.
f) Because you want to be a great tech+biz hybrid. <== Also a great reason. But it depends on where you want to work: large companies will value you. Small startups will probably not value your hybrid skills as much, or may be counter productive.
g) Because your parents want to have an MBA in the family <=== Terrible reason.
h) Because you want to meet people and build a network <=== Seems expensive for that reason. However, several schools do have specific areas where the networks are strong: MARKETING, TECH, ENERGY, etc. So if you want to work in those industries, getting an MBA from a school with that network will be very useful
i) Because you dont want to still be an engineer when you are 50. <== This is a tough one that I have been helping a colleague with lately. Reality is that there is age discrimination in the work force. Being an old engineer requires being an AWESOME engineer. I have heard from other engineers that it is tough to be old and mediocre (though you can be young and mediocre). If you are old, then being in some other function (or in management in technology) gives you a longer career to retire on. Of course, if you are awesome, then nobody cares that you are old.
It seems you want to go into "Executive Management." That is a whole different question. The first question to ask is : what kind of company? Then research whether those companies value it.
I made my decision based on [a][d][e][f] and it worked really well for me. But maybe I was lucky and had a lot of people who helped me a along the way. I have heard others who make it into executive management due to some other reasons (hard working, right time right place, family connection, tag along a friend who is going up, etc.). So I am not sure one leads to the other.
These days, it seems that being an engineer is an awesome way to have a huge impact (unless you are in I.T. or something like that). I think I would still choose to get an MBA today, but I still think i will go for an MS when I am 50 or so, because of reasons [a][d] above.
I hope this is useful.
Good luck with your decision!
Then I learned PHP to run a website of our school class, I used PHP to automatically generate a gallery of pictures located in a folder. Saved me tens of hours of time.
Then I started playing with Flash and ActionScript and I was shocked to discover that different shapes - triangles, circles and rectangels are objects that share methods (resize, fill colour etc.) and that was the Object Oriented revelation.
I no longer work in IT, coding is just a weekend hobby.
Now what I still have to learn is to make bigger things that would make sense for others, both in therms of usability and code readibility (I write heinous-ugly code). I am ignorant of MVC model. I don't know much about linux administration or scalability and functional paradigm. I hate myself for not knowing math beyond highschool level.
Still a long long way to go :)
Now I'm in a secure but not very well-paid job as webdeveloper, where I have to code in classic ASP and mostly just do boring-as-hell copy-paste work.
Later my friends and I would use the link cable to share programs between our calculators, and I would pour over the source code and try to understand everything. There was an ASCII fighting game I loved and I added new moves and characters.
Once I learned how to "view source" a website I started doing that everywhere and figuring out how the Web worked. That, plus a Linux install disk and an old, case-less desktop got me on the road to where I am today (supporting a SaaS company as an Infrastructure Engineer).
In what must have been an early example of software piracy, I dumped a hex dump of my University's Intel development system's macro assembler and typed it in by hand. I hand edited the code in hex to use the Sol's cassette tape drive instead of the paper tape, Cool stuff: Load assembler from tape, load assembler sourec from tape, rewind, load again for pass two.
UCSD Pascal came out around that time, but it required more than the Sol's available 48K of memory. I disassembled the Sol's monitor and moved it from 0xc000 up to 0xf800 (I think) and, Hey Presto! I had a Pascal development environment. I think I wrote one or two Pascal programs before I met... C.
I first used Small C on the 8080 and then decided I needed a processor with better addressing modes. I switched to the 6809, wrote the Introl-C compiler, and almost lived happily ever after. :-)
I bought a copy of Turbo Pascal when it first came out and that was really my first foray into the world of 'real' programming. I think I made my first $$ from a software sale from a Turbo Pascal simple point of sale system I wrote for a pharmacy.
I've found the best way for me to really get to grips with any language is to start building small 'real world' projects with it and experience all the triumphs and pitfalls along the way.
Having said that, I do struggle with some new concepts these days. NoSQL still baffles me, and I never got the hang of Ruby on Rails (my latest web app is 25,000+ lines of Ruby but in a Sinatra based framework).
So, no formal software development training, but I have the love for creating stuff out of code that keeps me motivated to constantly learn.
Edit: I probably wouldn't have been exposed to half of the stuff I now know if it weren't for HN, which I consider one of the treasures of the internet.
In high school I was extremely lucky to have an amazing teacher that taught us C++ by throwing away the standard state-provided manual (this was Romania) and using her own methods, problems and curricula.
Next, coding interactive visualisations kept me going (there were cool enough to attract attention of well, umm... girls. I was a teenager, mind you). My high school graduation project was a 3d engine coded up from scratch in actionscript.
I took a break for two years while studying architecture, but then discovered all the amazing things you can do with space, geometry, networks and code. I am still discovering new avenues. I'm am a fully licensed architect (read buildings, not software) yet I now find myself coding all the time.
By reading this book, I've developed my skills in programming with C/C++, assembly language and also learning computer architecture all at the same time. This book contains lots of low level stuffs like designing a cpu core, translate a C++ program to assembly, write an assembler, and many more. The explanation starts with a very simple concepts like translating y = x + 1; to assembly language equivalent until translating an object oriented code to its equivalent assembly language code. It has been a lot of fun learning the relationship of cpu, operating system and the compiler. The exercises are easy enough and had really sharpen my skills. Although the target machine is theoretical, I was able to switch easily into the real machine.
 - https://www.amazon.com/Assembly-Language-Computer-Architectu...
This limited Visual Basic had most of the features of the professional edition, except you couldn't distribute compiled programs (only run them in the editor), and they took out all the help files for some reason. I got pretty used to having to forage on my own to find decent documentation for anything, relying on computer manuals from local libraries and tutorials from random sites to fill in the blanks. I'm not really sure why I had the patience to put up with that, to be honest. I think I just assumed everyone learned programming like that. I pretty much never met another person who knew anything about computer programming face-to-face until I went to college.
When I got tired of not being able to compile anything, I ended up experimenting with Visual Basic.net in a beta of Visual Studio 2005 a relative gave me, had a bad experience with that, and started looking for alternatives. Eventually, I basically settled on Python.
I still think Visual Basic 6 is one of the best programming environments ever made. It started in seconds, the GUI designer just worked, and the autocomplete was perfect. It even opened up with a blank project you could start screwing around with without even saving anything, encouraging a lot of experimentation with the widgets and language. It was QBasic for a different generation. :(
After that, I kept coding because I really liked solving puzzles and building things. To me, libraries and APIs were like pieces of LEGO that you could use to create your own contraption. Probably the most exciting coding moment was when I figured out how to use interrupt 33h to add mouse functionality to my games!
I picked it up very quickly, and made my mom (a teacher herself) a grading program she could use to manage student's grades, wrote a couple of screensavers, all in turbo pascal.
I then delved into C++, and started learning unix, and learned to write system utilities and scripts as well as basic sysadmin stuff.
I took some time off of school to work as a touring musician, but when I went back to college (as a CS major), I needed a job, so I got a job at Glaxo Wellcome because I was a capable sysadmin who could manage the DEC boxes they used for development, and I could also code. I did a bunch of things for them in C, then perl, then finally java after it was out.
I'm coming up on 20 years of working as a professional programmer, and I still love to code as much as I did back in high school. I've had various executive roles over the past 8 years, but I've never moved away from coding. It's one of the great joys of my life.
I started intentionally learning when I got an office job in college and realized that a lot of the boring stuff I was doing would be trivial to automate. After excel formulae stopped being enough for what I wanted to do I went and learned python. VBA would have been the next logical step but after some investigation I found that was a good way to get shanghaied into terrible work forever.
I learned initially through Udacity's intro to programming Python course (their original search engine one), and then Norvig's follow on course. After that I started getting better at learning from the documentation and looking up the math and data structures I needed.
After I got sick of the office job I was at I did a dev bootcamp to get some kind of credential and to get some webdev experience (all my previous code was data munging, web crawlers, really terrible home grown templating solutions etc).
When all you have is a hammer everything looks like a nail, but code is one hell of a hammer, so I kept coding because there was always more crap I didn't want to do repeatedly.
The thing that struck me though was how no one else in that office (filled with quite intelligent people) seemed to see the opportunity before then. This is one of the reasons I wish everyone at least had exposure to coding. It seems rather unfair that previous experience as an addle-brained 8 year making a Pokemon or snowboarding website should have seeded such a relative advantage.
I started learning programming when I was in college, which wasn't some serious learning but merely required courses of my major. After I got my bachelor in engineering. I continued to study in a research institute and got a master degree in geosciences. Later on, I started to teach English the moment I graduated.
Right in the beginning of this year, I realized that teaching bored me to death. I still wanted to do something technical. So, I began teaching myself coding in Objective-C. Three month later, I became an iOS programmer.
I don't think I am particularly smart or anything. But, when I worked with people who had one or two more years of programming experience than me (I only I had six month or so doing real programming), their code was just fucking too messy: no comments, using pinyin to spell variables, having no idea what MVC is ...
All I thought was guys you should really take this seriously. Or, you'd better consider doing something that's your strong suit.
First I was curious as to how computers could possibly work, then I wanted to build things for computers, and then people wanted to pay me to build things for computers. It's worked out pretty well for me so far.
These days I'm doing Python/Django mostly, but am getting into Elixir/Phoenix. I have yet to take a formal programming course.
Phase 2: took a class in high school on Visual Basic and learned more on the side so that I could make games with it. Made a couple games with it.
Phase 3: took essentially Java Programming 101 at a local community college concurrently with high school, and started to get serious about making games.
Phase 4: made about 30 projects in Javajust whatever I felt like working on at the timegames, game engines, an emulator, 3D model loading/animating/rendering library, tools for making content for games. Almost none of these were completely finished but I learned a ton with each, and sort of climbed a ladder with it, trying progressively more difficult things all the time. This lasted ~3 years.
Phase 5: got a repetitive strain injury from typing/mousing too much and stopped coding (not completely, but nearly) for several years. Studied mathematics and language more deeply than what school prompted me to previously, somewhat hoping this knowledge would come in handy if I could return to coding some day.
Phase 6: decided to work on a major project that I believed would allow me to efficiently write code with motion sensors (thereby avoiding the injury). This ended up being a pretty deep, difficult project that was actually doing something sort of novel in software for the first time, and I learned tons working on it over the next year and a half, primarily about programming languages and architecture (http://westoncb.com/projects/tiledtext).
Five years later, I'm still a pretty mediocre programmer. But now when I can have an idea, I get to watch it become real. It's a good feeling :)
It was clear that I enjoyed that, and I enjoyed the old DOS games at the time, and my dad had a bit of an IS background at the time, so he encouraged me and together we did some BASIC programming together. I also eventually got one of those Lego Mindstorms kits as one of the other commenters mentioned when they came out, which probably would've been around age 7 or 8.
I just took off by myself after that. Playing around more with basic, eventually learning some basic frontend stuff so I could show off webpages to my friends, and then moving on to some Java after that.
It's been a passion ever since.
Everything I actually know about coding came about during my undergraduate engineering education, where a minimal amount of Matlab was needed for labs. I got super into it, then I installed linux, then I started writing my problem sets in LaTeX ...
Several years later, my second job made me into an actual developer for scientific computation, and that learning curve consisted of three years of pair-programming with a guy who has 30 years in the game. You learn quickly that way, and I had enough a foundation under me of my own making so that I didn't drown -- but not too much that all my bad habits were too hard to undo.
Totally failed at teaching myself Z80 machine code on the Spectrum though. Part of that failure was probably something to do with manually assembling the code and POKEing it into memory (ie crap tools).
Did more AmigaBASIC on an Amiga 500 in the late 80s. Totally failed at teaching myself C on the Amiga too (crap tools also played a part here - using a really buggy C compiler I found on a Fred Fish disk).
As for why...what on earth is more fun than coding?!
(edit: I see there's an HP laptop called the HP 2000. I mean this one: http://www.hpmuseum.net/display_item.php?hw=411)
At 17 a friend of mine asked me some help to port an old (and probably still working) COBOL app. Project wasn't really financed and absolutely not intended to be a production ready solution.
At 20 I was still working on that project. At that time in production and at least with the budget for us.
Year after year I can tell that my knowledge was totally community driven. Than.. I understood Unix (yes Microsoft was everything for 10 years). And I definitely understood how to code looking at other's code.
Btw. Thanks everyone for the open source.
I read the elusive documentation (to a 12 year old me, very elusive) word for word and just went with it.
At the time, I didnt't know what a compiler or an interpreter was so I just wrote it all down on paper and did the calculations/instructions in my head and wrote down the results. (I couldn't tell if I had an error or not)
After about 2-3 weeks, I quit. I couldn't understand anything really. I had no idea what a class was or what a method did. About a year later, I heard of minecraft and started playing that. I heard it was made with java so I went on youtube (which I recently found existed) and watched java game development tutorials.
Needless to say, it was hard and I didn't udnerstand anything. I didn't know java or anything.
After about 2 months or so of frustration, I found the official tutorial on oracle and started learning from that.It was hard and I did not learn anything.
in 9th grade - 3 years ago - I took computer science as a math elective class. I learn java a bit slowly but I understand almost everything due to my past failed attemps giving me some foundation.
During the summer after 9th grade, I started learning python again. I got all the way up to classes and such and stopped because I couldn't understand OOP in python because noone could even begin to teach OOP with python. I felt inadequate so I temporary stopped (quit).
During 10th grade, I started to really learn java. I bought tons of books and used the official tutorial with various other websites, and after all of my hard work. I understand the basics of java.
Skip to now - 12th grade - I'm learning extensive OOP programming concepts with java and learn how to create GUI applications with awt and swing (holding off javafx for now).
I'm mostly self-taught despite going to classes for 2 years of computer science in highschool.
I just really want to say, through all of my 4-5 years of experience on and off of learning programming: If you don't understand something, come back to it later.
We didn't have a computer but I read that and loved it. A friend had an Apple II and I got to try out some of the stuff round at his house. Later on when I was in year 9 (1985) I got my first computer ,an Apple //c and I did more BASIC and some assembler. Then uni in 1989 where we learnt Miranda, Modula-2, etc etc. Made the transition to Java in 1997.
5 or 6 years later we finally get a Packard Bell from Walmart. Discover BBS. Warez a copy of Turbo Pascal 6. Rest is history.
Still have yet to publish it elsewhere as I had planned to edit it extensively. I welcome feedback on this draft from HN readers, though!
2. Fail horribly, make some crude pong and snake clones
3. Dabble in Python automating little pain points in my life
That's where I'm at right now.
Now I'm okay-ish with c++, python, and a little bit of matlab. I need to do some serious work with learning design patterns and study more algorithms before I'd really consider myself a good programmer.
It's always been about creating something.
Initially I used it in math to avoid having to do the rote computations, but eventually I started building other stuff. I built a simple game that had you navigating an ASCII character to collect the pi while another ASCII character chased you. Frames would advance on input, sort of like a rogue-like.
Eventually I made a text-based RPG combat game, where you would select enemies to battle, and gain XP to increase your stats which would allow you to fight higher level enemies, etc. The final boss's selection code was '666' and he was orders of magnitude more difficult than the next-hardest enemy.
I also had a book about learning to program in C++, it was p bare bones and I didn't learn very much from it.
I hate to be pessimistic, but if you do move to Finland you'll struggle enormously with the bureaucracy unless you speak Finnish.
Yes you can move. Yes you can move without a job, and you should be able to incorporate, and handle the minimal business things pretty easily.. But you'll get conflicting advice from every bank you speak to, and the process will be more grueling than you imagine.
If you're registered here, have permission to stay here, and you qualify I think the fact that you're a foreigner won't discount you from grants/funding. But again the language barrier will be pretty high.
(Source: Moved from Scotland to Finland. Love it. Not an entrepreneur, but I know a few.)
Ireland and the Netherlands sound like the next reasonable options. Easy to do stuff in English, big pools of talent to poach from, very open to foreign companies and who knows, you might land a sweet tax deal while you're at it ;-)
This also filters companies to an extent. I would rather work for a company that values the content of the resume over the presentation.
Template (LaTeX): http://willem.co/cv/wp_resume_template.tex
Awesome Resume Templates (LaTeX): https://www.rpi.edu/dept/arc/training/latex/resumes/
When writing your CV, keep in mind that only three things count:
1. Short. You're seriously testing a recruiter's patience if your CV is longer than a page or two.
2. Scannable. Your CV only gets a few seconds of attention before a recruiter decides to read it or not. Make each second count.
3. Results. Don't stick to writing what you worked on. Also spell out the results and how it contributed to the business.
Last but not least, never forget that your CV's only purpose is to get an interview. Just like a marketing brochure for a product that requires a sales meeting, less is often more because it can give an employer a reason for saying "no" before you ever get to talk to them:
I'd be a bit wary receiving something like enhancecv - if you have space for a quotes block, what are you leaving out? I might use something like that if putting my CV on my website, but as well as the boring traditional plain format.
* It's fairly plain and minimal but looks nice and professional, and can still be customized so it doesn't look cookie-cutter.
* Using LaTeX means I can track my resume with Git and easily convert to plain text.
* Using a popular template included with many TeX distributions means finding help is easy.
* Using a template means you can just focus on the content and stop worrying about design.
I understand, a picture is worth a thousand words, but this is too convenient.
Anyway, I vote for plain text too, somehow it looks more serious and clean.
I've taken the source code from here https://github.com/jglovier/resume-template and made changes according to my requriement.
Someone might print a stack of resumes on a crappy printer that's running out of ink. A recruiter might fax your resume to a client. Someone might want to read your resume on an off brand PDF viewer on a phone with a slow connection. Someone might have 200 resumes to look through and not want to figure out the unique UI for yours.
On the other hand if a human is reading your resume, creativity may be a plus. So that might apply to small businesses, start-ups, etc.
I'm not sure how a normal office would work though, seems like I would go crazy in one of those.
It's more than just distractability.
Hating open offices is pretty common, ADHD or not, extrovert or not, as they tend to kill concentration.
Oh, you mean you were behaving like a child?
I don't have ADHD and I hate open spaces.
That being said in the SF Bay Area "tech bubble" no one really cares about degrees. They care about what you know and what you can do. That may not be true where you're looking for a job though. You should look at what real job postings are looking for and perhaps talk to a recruiter or two (if possible).
Anything from a real university is likely to provide you a lot more information and access, way more than you can ever get at Udacity. However if you can't afford the time/money, Udacity or similar learning courses may not be a bad option.
Full disclosure- I'm currently in that program and loving it.
However, such roles are very limited in the industry. Most jobs you will find expect you to be able to apply, combine and optimize existing algorithms to given real-world problems. This requires a different set of skills that are seldom taught at University (you're typically expected to pick up these practical abilities on your own).
Udacity's Machine Learning Engineer Nanodegree, like its other programs, is heavily project-based, and has been developed with feedback from industry partners in order to emphasize the skills and concepts that are most relevant for the vast majority of jobs that are out there. This focused curriculum allows people with limited time or a related background to efficiently get started in machine learning.
Keeping this mind, ask yourself what your ultimate goal is, what time constraints you have, and choose accordingly. There is no shortcut to success, esp. in a competitive and highly technical field like machine learning - whether you opt for a Masters degree or a Nanodegree, you will have to spend considerable effort building a strong public profile (e.g. by participating in Kaggle competitions, and working on additional projects) in order to make yourself stand out from the crowd.
Disclaimer: I work at Udacity, in case you didn't realize by now :)
The important thing is that you're able to learn and master the material and use it to create real value in the world. If you can do that, I don't think anyone will care how you came by it.
The great aim of education is not knowledge but action.
There aren't any research projects, and you won't ever operate at the cutting edge (WaveNet!) at Udacity. It's like trade school for software, which is fine if you're highly motivated or just want to acquire some skills.
I don't know how expensive Master's degrees are in Barcelona, but GA Tech has a online Master's in CS for ~$500 per course , where you could focus on ML.
 https://www.coursera.org/specializations/machine-learning https://www.omscs.gatech.edu/
This blogpost outlines what my plan and concerns were about the self-taught route:
Since then, I've been asked why I ultimately pursued the formal degree route, and this was my response:
"Without a formal CS background, I was pretty skeptical about my chances of getting accepted, but I applied anyways. I was so skeptical, that I convinced myself it wouldn't happen and set off to teach myself. But I ended up getting accepted into a Masters program in Barcelona, and I couldn't turn down the opportunity. I love Barcelona as a city, the tuition is reasonable and the program was inline with what I was looking for - a larger focus on application with foundation in theory as opposed to full on theoretical research.
I chose to do the conventional degree because of the above, plus the allure of receiving a piece of paper that people respect. Regardless of my thoughts on the real value of conventional degrees, it's hard to argue against their societal credit.
I'm new to this industry and pretty young, so take everything I say with salt, but my main advice would be to just build cool stuff. Whether you do it at a university or through autodidactism (learned that one from the HN thread), just work on cool projects. My naive hope is that people will care more about stuff you can actually build over a piece of paper with your name on it - but it doesn't hurt to have both."
That was in response to a thread about this guys blog, which gives some further perspective on the self-learning route:
I'd like to add, that I've since decided to do both. I'm using the curriculum I developed for myself with online courses to compliment my formal education from the master's program, which has been working well so far.
ps. If UPC is the program you're looking into, it can be completed in 1.5 years (3 semesters) instead of the full 2. The last semester is dependent on how long it takes to finalize your thesis. Also, if you have questions about the program (again, assuming it's UPC's), my email is available from the site in the first link.
I'm not a superhuman kettlebell-swinging crossfit soylent paleo junkie by any means, but I walk to work every day and bike a good amount using my city's bike-share. And I've started (over the course of 2 years, it's so tough!) to eat less-unhealthy food.
Being happy at work makes a big difference to my motivation, I'm able to channel some of that extra energy I get from feeling like I'm putting good effort in, into my side projects. I work 9-5 most days (as a programmer).
I find I'm more motivated when I keep in touch with people, and also when I work on projects that get me interacting with people who are excited about what I'm doing. For me at least, it's not as fun to work on a project if people I know don't think it's cool. That was a snippet from a Paul Graham essay I took to heart and I think it's true.
I also occasionally journal my thoughts down, which makes me feel calmer and more ready to approach a task.
For me, it boils down to 3 things. Pre-planning, habits and elimination. I have written about each separately on my blog http://www.new2code.com/2016/06/deep-work/
I plan a lot of stuff on my Google Calendar. My whole days are planned in advance including free time. When I am learning a new language, I set aside time for study. If a friend asks me to hang out, I can just check to see if I have prior commitments. I also have the regular gym slot and after 2+ years, I am simply routine when it comes to exercising.
Next, learn how to build habits and routines. This saves a ton brain power. There is a great video on habit building
Also, check out a book by Charles Duhigg called The Power of Habit.
Finally, cut out the news and as much information as possible. Not watching the news added a ton of happiness to my life. This also cuts out distractions. Check out something called the Low Information Diet which goes into more detail as well as a book called Deep Work by Cal Newport
I also wrote a guest post on the blog Simple Programmer that goes into more detail on the willpower.motivation side of things https://simpleprogrammer.com/2016/09/07/limited-willpower/
I hope that helps. Largely I don't believe in long-term motivation, it is more to do with becoming routine.
In general, reading about anyone's success is like a shot of motivation directly into my veins.
I approach this the same way when it comes to motivating myself to work on a side project. Another good approach I picked up is the 5 minute journal. You invariably end up reflecting on things you could have done better. This helps you to focus yourself and pay attention to where you are not getting the most out of life.
I wrote about it before here: https://medium.com/@kensodev/how-bike-racing-is-making-me-a-...
Racing bikes (and training for it) creates so much structure in life. What you eat, how you sleep, when you recover. Even though I work most of the time from home, it gives a clear order to the day.
That was my problem too when I was preparing college entrance examination. My teacher told me that you can get a motivation by categorizing what you love, what you fear, and what you hate. Someone can get a motivation because he hates something. So, write it down! Repeat what you've written regularly before and after you're going to bed.
Side note: I would recommend James Clear's reading list for motivation .
My life sucks. But I'm also young. I watch movies, sci Fi movies/shows which motivates me. I want that life. But then I try to program and I'm like "Holy crap. I'm so far away..."
I hate going to work I perform the same tasks over 6,000 in a day. Everyday is the same. I am wasting my life.
Motivation by fear isn't a good thing. Like the cliche, follow what you love.
Me I'm about trying to get out of my situation. Make money. I HAVE AN IDEA!!!
The problem is discipline. Sleep is a basic thing. Screw up your sleep pattern. You end up wasting time being awake and trying to fall asleep/not able to work.
Yeah discipline is the big thing. And true motivation from a desire/longing to do whatever it is with an internal driving force.
But the more I think about it ... I guess it's fear, it's the fear of a meaningless life.
Eat, shit, fuck, breath, die ?
How do I stay motivated to keep at it with my startup? Aside from enjoying doing what I do, developing web apps, I write down the potential profit involved that I could be making every month. Those are the numbers I want to be making that I'm currently not making and that is what keeps me motivated.
Money isn't everything.. that is certainly true! But making enough money to pay off my mortage, my credit card debt, my bills, and still have enough left over to donate to a cause and have some peace of mind is the underlying motivator.
The point of this comment is that you don't need motivation you need discipline.
Motivation comes and goes, discipline stick around which is what you need if you want to build anything meaningful...
I am a very distracted person, and need constant reminders. I have designed my life in such a way to be constantly reminded of my priorities. Once, I decide I need to include an activity in my life (be it learning, workout, eating healthy), I set up a time and corresponding reminders/ alerts. This sort of planning and tracking helps tremendously stay focussed on only things that matter.
Some days it will be closing X issues, or a cold beer, or a gaming session with a friend, or tracking down that one annoying bug, or seeing that my numbers are low and I need to up my game (which can conflict with long work to find that bug of course), or reading a book, going for a bike ride.
There are other ways I do it but no single thing hits the spot for every day and every situation. Having a stock of various methods works though and I'm always happy to add another.
Daniel Pink on Incentives and the Two Types of Motivation > https://www.farnamstreetblog.com/2016/08/daniel-pink-two-typ...
I struggle to get motivated as well.
Non-profits often fill this gap by solving an important problem until it's profitable to solve, at which point the free market can take over.
One problem that (in my view) is important, solvable, hard and profitable is rural electrification. There's ~1.2 billion people without access to electricity  and more with intermittent access only. The problem is, there's no one solution fits all. It needs to be chipped away methodically , building products and finding traction in different locales that allows the free market to work.
0: http://www.worldenergyoutlook.org/resources/energydevelopmen...1: I worked at a solar NGO in Tanzania.
There is nothing that will get solved with the current "bugs are unavoidable" mentality, which is simply a mediocre and unprofessional attitude.
The way I see it, if mediocre developers try to "solve" world issues, the solutions will be mediocre as well, just like their software.
More of my thoughts here: http://ortask.com/why-your-mindset-might-be-setting-your-sof...
If you actually want to make a huge difference, get into economics, politics, policymaking, etc. to affect the way markets work.
On the other hand, my two years of experience was "Sysadmin a server for a local church." and only reason why my local church needed sysadmins was because me and a friend of mine bought a server, collocated in a local ISP that a third friend worked at and decided "Hey, our church could use a website and we could be the sys-admins :-)"
To answer your question, I think the utility of Master in CS as well as learning through MOOC's is dwarfed by anything you can present as "Somebody already paid me money for a thing I did", if you want to primarily land a job.
When I thought about getting a master degree, I thought about these questions:
Do I see ever wanting to pursue some sort of academic career? I.e, get a phd, desire to write papers on obscure topics, e.t.c. then definitely.
Do I want to learn things that require at least somewhat well furnished lab? I.e. it is quite hard for MooC to offer a lab on side-channel attacks on security cards or hands-on with sensor-array networks.
Do I want to learn the theory more in-depth and does physical classroom help in this regard?
How does the cost compare? What do I get out of this credential-wise?
In my case I wanted to get masters in Information Security for these reasons:
1. I already endured 2 semesters of algebra and I.S. was one of the few that both interested me and would use the theory I have learned in BC
2. yes, one day I might go back to school to crank out few papers just for fun and the low probability of getting a proper academic title :)
3. school did have a few nice security lab courses present
4. having a course end with proper seated exam with lecturer present helps me focus on studying
5. I study in Czech republic, which means I have first 3 years of tuition paid for by the state. (Even if I didn't it is under 1000E/semester).
I would say it was worth it for me, as I worked on FreeBSD servers to set up a system for deploying experimental modules to test security measures. I had zero experience with anything of that sort before.
I say find a professor willing to provide work (and pay) for your time in a Master's degree and it's completely worth it.
I moved from academia to a data science job, and it wasn't as hard as I thought it would be.
My background: Math PhD from a top school, though my research was very abstract - not really related to machine learning, algorithms, or statistics. I had some coding experience in undergrad but none in grad school.
My path: I did the Insight Data Science bootcamp (http://insightdatascience.com/), which was very effective for me.
There are really two things I got out of the bootcamp that made it effective:
2) Impressive project(s) to show off & get your foot in the door.
You may be able to do these things without the help of a bootcamp, and I think especially if you're more interested in coding, there are a ton of good bootcamps that can provide you with the connections and last little bit of training to land a good job.
Its certainly possible, but my guess is the big challenge is persuading a company that this is actually possible.
His strengths are being to understand the mathematical concepts and use them as tools to solve real world problems. I do not know your subject, but I would recommend finding something in what you do and applying it to tech -- you should be aiming MUCH higher than throwing a web application together.
Edit: I'd also recommend applying to Google and not expecting to make through the interviews. The amount of effort in getting up to interview level there certainly helps in getting positions in less well known companies.
I personally find it missing a lot of features for working with cross-functional team (e.g. developers + designers + marketing).
I'd love to see this implemented:
1. filtering cards based on milestone / labels2. assigning labels, milestone, labels to note (bcs why the hell should I convert to issue before assigning)3. multiple repositories4. automatically group pull requests and related issues5. automatically move card to "Review" column when PR is sent6. automatically move card to "Done" when it is closed
I used to manage with waffle.io and love it so far. (I'm not affiliated any way with them, just a happy user)
Not to mention that it's also free for small teams.
However if Windows is core to your workflow.. check out this from my fellow Docker Captain:
And the installation procedure for Windows Containers:
Take note that only nano-server will run on Windows 10 pro.
Feel free to get in touch on Twitter @alexellisuk
Depends on who you ask and what their experience is. What can we tell you? Everyone will tell you what their preferred solution is. Since it's a subjective question, one person will tell you to go ahead, another that it's pointless.
Why do you care what is going to be popular if you are building your own laboratory? Research which is the best solution; research them all. After all, that is the point of a laboratory, isn't it?