2020-03-20 17:22:44

(Not sure if this belongs in the developers' room or the offtopic room. Put here for now.)
Say I wanted to get into  work with my programming skills. What must I do?
I'd hope this could prove useful to others, if it gets good responses, so I don't want to make it overly specific to my personal situation. So one could treat this as "if I've already completed one or more Audio Game, how do I go from there to employment?"
I'm in the US, and unlikely to move (especially given current events), but in the spirit of generalizability, responses relevant internationally are welcome.

看過來!
"If you want utopia but reality gives you Lovecraft, you don't give up, you carve your utopia out of the corpses of dead gods."
MaxAngor wrote:
    George... Don't do that.

2020-03-20 17:51:16

Get a CS degree, if possible.  That's not necessarily the be-all end-all and you can certainly do without, but it will open doors when your resume lands in front of someone with 20 resumes in front of them and they have to pick the 3 to interview.  For the sake of this discussion let's say that's off the table--it's the super obvious way, anyone who is asking this question probably isn't going that route.  But if you can go that route, it's a big time investment but there's an almost guaranteed job out the far side even if it's a crappy college.

So you're not doing a CS degree.  You need some to all of the following:

Learn a language that's not BGT.  This will be your interview language.  You don't need to do games in it or anything like that, but you need to be able to code algorithms in it.  Things like linked lists, trees, etc.  Python is popular for this.  Usually you'll be allowed to use any language you want, unless the job mandates a specific language in the requirements, but it needs to be a language your interviewer can understand.  Fortunately, language is less important at higher levels of programming, but unfortunately BGT will be a big mark against you: almost any other language has real world, quantifiable value, and BGT doesn't even do terminal output.

Learn algorithmic complexity, also known as big-O notation.  This is a method for analyzing how fast things run at a more involved level than "I measured and it took 5 seconds".  You don't need to understand the calculus definition, but you should have some intuition for it nonetheless and be able to work out algorithmic complexity of common programming constructs.

Learn algorithms and data structures.  You want at least linked list and binary search tree, but b-trees and heaps are also really common.  Code these for practice.

If at all possible, find an open source project and contribute meaningful stuff to it.  You want a resume that someone interviewing you can relate to.  In these circles, NVDA might be a good place to go: it's relatively complicated, it has a good altruistic angle, and it will give you good info on how parts of Windows work.  Plus there's lots of ways to spin work on NVDA into stuff that's not accessibility, i.e. reverse engineering, systems automation, etc. depending what you do.

The OSS project idea also teaches you how to work efficiently on a big codebase that isn't written by you.  This is an important and surprisingly hard skill to develop, and is critical for job performance.

The really large companies care about algorithmic analysis and being able to answer their interview questions for junior-level positions.  The small startups care more about you being able to demonstrate the ability to learn quickly and handle a wide variety of problems, so for example "I know 5 programming languages and have done big web service project and also my own OS" is the ideal candidate for a lot of them.

Be prepared to take a shit job.  You can find stuff that pays crap because they're desperate, or which will have you on call 24/7, or which will have a terrible company culture.  And they'll hire you because they can't get anyone else and consider you a bargain: too inexperienced to have power, and willing to take the low pay.  If you do this, be prepared to hang on for a year.  A year gives you a resume and legitimacy, and says to the next non-shit job that you're able to hack it.  Also, shit jobs are usually worth stories that make you sound cool.

Get on top of various tools, and find out what the potential job uses.  Most jobs will be happy to tell you; even sighted candidates ask.  Though you likely don't have the experience now, being as this is your first job, it is seen as a relatively normal question, since many tools come with an implied workflow and style of doing things.  In other words even sighted people care.  To name a few known-good environment things: Slack, GitHub, Phabricator, Zoom, hangouts, Jira.

Pick technologies you like, or careers you want to have.  There's literally hundreds of thousands of job openings at any given time.  You'll need to narrow the search.  Specializing is the fastest way to big money, so expect to stick with it.

Learn some or all of the following: a database (I like Postgres, but MySQL is also good), a web backend framework, JavaScript (even though you can't do Frontend), Redis, a major cloud provider (if possible--there are money barriers).  If you can do a non-audiogame project that uses some or all of these, you'll find a lot of web backend places willing to talk to you.

You don't need to do all of that; frankly the most important things are near the beginning, half of getting a job is luck, and I'd actually suggest interviewing as close to now as possible.  The first few interviews won't get you a job, but they'll teach you what you need to work on and what kinds of things about interviews are going to be challenging as a blind person.

Fortunately onece you're in for a few months, they don't want to fire you.  Programming has good job security.  Unlike many other careers, it'll take 2 to 6 months at any given organization before you know their stack, and they account for this, and they know that if they fire you someone else will take 2 to 6 months to replace you, and any knowledge you have about components that you worked on walks out the door with you and has to be worked out by the new guy.  You can land 6 figures from nowheresville North Dakota if you try for long enough, and the average salary in Seattle for this stuff is something like $150000.

At some point in the process they're going to ask you to do salary negotiation, which is either a make it or break it moment, and they're going to ask you to give a number first most of the time.  Be prepared for this.  Reasonable numbers for Seattle might look like $70000 or so for Junior, $100000 to $120000 for normal developer, $130000 to $150000 on your transition to Senior (i.e. level II or whatever) and then beyond that it's highly, highly position dependent.  You can get better data than this, that's just my personal experience.  In Florida these numbers were much smaller, because the cost of living was lower; top salaries there were topping out around $120000.  But don't think that's bad: in Seattle you can't live for less than around $40000/year unless you have roommates.  At the high end, Seattle/other big programmer city is a very attractive proposition, but at the low end, be aware that staying where you are and taking less might leave you with more savings, and be sure to run the numbers.

You'd think that these numbers depend on where the company is.  That's not the case.  If you're remote, these numbers depend on where you are.

And to be honest I think that probably answers all the questions.

My Blog
Twitter: @ajhicks1992

2020-03-20 18:41:08

At two. Is JavaScript an OK language for a job. I like JavaScript and if there’s a way to get a job working with it that would be amazing

2020-03-20 18:49:12

@3
Sure, go learn node.js. Problem solved.  You can't do frontend, but Node is bone-crushingly popular.

if you're going to go the Node route, also pick up Typescript which is just JS plus types, and you become a very attractive candidate indeed.

My Blog
Twitter: @ajhicks1992

2020-03-20 18:56:21

I can do both. Front and back end at least so i’ve heard. But will this make me a lot of money? Just curious as I heard that web is becoming more and more popular

2020-03-20 19:09:07

@5
You cannot do frontend if you're blind.  Period. End of discussion.  There's no way for you to debug layout and animation which is over half the job, and if you interview for that position there's no way you're getting it.

Most engineers only do one or the other anyway.  You can do both in the sense that you could learn both, but developing frontend expertise even as a sighted person is an entire specialty--they have to learn things like how there's this one bug in Safari layout or whatever.  Backend is likewise, but it's a different long list of skills.  For that reason, usually they're done by different people anyway.

Most jobs that you'll find when you look for blind accessible programming jobs, these days, are web backend.  Doing web backend isn't a problem at all and is indeed worth 6 figures in the U.S.  And Node is a very popular choice for it.

My Blog
Twitter: @ajhicks1992

2020-03-20 19:15:58

Oh. OK, thank you so much for your answer

2020-03-20 19:26:37

I come from the era when using Javascript for backends would get you looks of wide-eyed horror. I just told everyone to try my JS games in IE6. But all that changed when the Firefox arrived. I mean, when IE7 broke half the things and Firefox proved better than IE anyway.
Mostly what I'm taking away from this is that the worst part is that I can't keep not bothering with databases. I did try getting into php and cgi long ago, but my webhost turned out to be a jerk (click here to enable php! Hahah, just kidding; we don't let you upload .php files. Enjoy the useless php myadmin directory!)

看過來!
"If you want utopia but reality gives you Lovecraft, you don't give up, you carve your utopia out of the corpses of dead gods."
MaxAngor wrote:
    George... Don't do that.

2020-03-20 19:40:00 (edited by camlorn 2020-03-20 19:41:27)

@8
I think you will like databases, based off what I've seen from you in the past.  Postgres is actually a really cool piece of tech, that you can stream all sorts of stuff to at thousands of rows per second or more.  These days you can't even outdo SQL with hand-coded stuff anymore because the compilers inside the databases are too advanced to be beat.

For something really fun (but very expensive too) look at Google BigQuery.  You can do SQL queries over all of Wikipedia with that thing, and they return in 30 seconds.  You can do queries over all the world news updated every 15 minutes.  The entire Bitcoin blockchain.  And by queries I mean there are readable, relatively simple examples of doing semantic analysis on books with standard SQL.

I would say that not PHP is probably worth more money than PHP for what that's worth.  Not PHP people tend to be more qualified in general, and whenever I hear epic architecture horror stories it generally tends to start with "We were using PHP and".

My Blog
Twitter: @ajhicks1992

2020-03-20 19:42:38

Also, if you want to practice tech, install Docker for Windows and you can spin up databases and stuff easily.

My Blog
Twitter: @ajhicks1992

2020-03-20 19:59:22 (edited by Hijacker 2020-03-20 19:59:44)

Regarding frontend development: Camlorn is right, you'll never be a full-power frontend developer, due to the already mentioned reasons. But what you can do is provide logic for frontend applications. As soon as the logic behind a feature is more complex than the actual design part (e.g. only one button needs to be added, but this button does something rather complex under the hood), you can basically do the job and just have someone place the button afterwards, which will cost this person like half an hour, whereas you did all the complicated stuff beforehand. That can help you taking away some pressure from your comrads, but in the end your main topic will be backend development. Apart from Node.js, Java is also very popular nowadays for that matter. We're also using C# in some exceptional applications for that, but thats rather uncommon, since it requires a Windows Server license to run on, and those are rather costly (Mono is a thing nowadays, but its still not the same than the original).
Frontend development however is not done by plain JS nowadays. You'll have to use some framework or another to do it, depending on what your employer wants to use. We're using Angular over here, but there are several others. It can help to already familiarize with the attempts of building a website using the most popular frameworks to date to dive right into the work as soon as you get a job, plus you already have experience when answering the interview.
Best Regards.
Hijacker

2020-03-20 21:22:48

Wow! camlorn hit all the points I was thinking about covering!
Additionally, right now, JavaScript and containerization and cloud are really big things to know for a job.
I am going to make a bold statement that might be an unpopular opinion, but I think at first, especially if you become comfortable with algorithms and data structures, you should consider applying for big name companies like Google, Facebook, Apple, etc.
I was fortunate in that I got software engineering jobs right out of high school. But if I hadn't, and I was starting from scratch, I'd probably consider accepting an offer at one of those companies. Recruiters I've talked to are looking for motivated individuals, and while degree is considered, it is not the number one thing to be considered. Of course, it depends on the hiring person and recruiter at the end of the day.
These big name companies allow engineers to explore and move around in the company.
I've received a few offers, so if you have any questions about the process, I'd be happy to answer. I ultimately chose to go with another company, still kind of big name, but neither of the big tech ones.
Another thing potentially covered in interviews is System Design questions. Basically, interviewers ask you to design a system from scratch, like Twitter or Facebook. You then have to provide them with a full overview of everything from the back end, to scalability, to front end considerations.
As far as things you should know for the job. Well, there are so many technologies out there!
As others have pointed out, as a blind individual, you may not be able to be an effective front end developer. However, it would still be a bit beneficial to learn front end technologies such as React, HTML and CSS, CSS Grid, Flexbox, etc.
Go see the curriculum at freecodecamp.org .
I recommend this to a lot of people. The curriculum is strongly focused on JavaScript technologies, specifically the MERN stack, which stands for MongoDB Express React and Node.js. Some say this is a limited scope, but if you want to be job ready, I'd argue this is a great start.
I've done some front end development myself. I especially like to initiate accessibility initiatives at companies, and web accessibility is front end.
I hope this was somewhat helpful. I feel there is a lot to the technology industry, so try not to get overwhelmed.
Other really popular stacks right now are in Java, C#, Ruby on Rails (not so much anymore, but there are remote opportunities in this stack), and PHP.

2020-03-20 21:31:08

@12
Problem with system design questions is I don't know how to get someone that knowledge without them having done it.

Also worth adding Go to the list of currently popular stacks.  It's not as popular as the others, but people who use it need people who know it and it's actually very blind friendly.  I don't like the language, but I do like lots of money, and this discussion is about lots of money.

If I was doing things today I would probably go for one of the big companies as well.

My Blog
Twitter: @ajhicks1992

2020-03-21 04:07:32 (edited by nyanchan 2020-03-21 04:11:33)

As for frontend, although it's unlikely that we do full frontend development, learning things that make web services inaccessible for screen readers does help, in my opinion. These are like undescrived images, css-stiled empty i or span nodes, css-styled custom checkbox and other form controls, ETC ETC. At the same time, learn how to patch them without altering the layout; you can actually fix a lot of stuff with WAI-ARIA and alt. While W3c normally recommends using standard tags and selecting WAI-ARIA as a kind of the final choice, I would do it if it will quickly change things. Learn React, View or whatever you're going to use at your company, and you'll be able to make their products accessible. However, this assumes that we do it as subtasks; we basically have to focus on non-frontend. I'm doing server side using Ruby on Rails, but when I find something inaccessible while debugging the service, I quickly patch it if it's possible and throw a PR.

I don't speak as good as I write, and I don't listen as good as I speak.

2020-03-21 04:24:51

This is awesome advice. I've been trying to find a place to get a job; my job-hunting efforts haven't been that good. I tried applying for Okta last year as an intern, I think, but that went nowhere (I got nothing back from them). I applied to Best Buy in like 2016 but din't want the job they offered me (was happy I got rejected -- it was an inventory management job). Tried applying for a few others, but got nothing back. I've been concerned about the sallary question -- are those usually on applications as 'trick' questions, of sorts?

"On two occasions I have been asked [by members of Parliament!]: 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out ?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question."    — Charles Babbage.
My Github

2020-03-21 04:58:23

@15
Salary can work one of a few ways.  How I've seen this go, and with a note that this is very much programmer specific--jobs outside CS are way, way less open to negotiating:

First, at the beginning you might get asked, before interviewing, what your salary expectation is.  This is something that companies do to filter out people who are expecting too much money.  For your part, you can filter yourself out by being arrogant and asking for more than you're worth, but for their part it's about quickly (and legally) eliminating the people at Google who made $300000 or something ridiculous who won't be willing to come work for $50000 before dedicating the resources to doing an interview.

At this point, you might also be able to get a salary range out of them.  Whether you can depends on how nice they are and where they are legally: companies in California, for instance, have to provide that info if asked now if I recall correctly.

Then you do your interview process, and they decide to hire you, and either you get an offer or you do some form of salary negotiation.  Once you're negotiating salary they decided they wanted you.  It goes a little like this:

them: "So we really like you, and we want to know what kind of compensation you want."
me (trying to find out what to say): "I'm flexible, what are you looking at?"
them (not wanting to give that info): "Well that varies a lot, we were really hoping to hear from you."
me: "How about $300000?"
them: "Well sure, but really you only have a few years of experience and don't have 20 patents from Google to your name, so how about $50000?"
me: "Well I live in Seattle, that's kinda low. Can we go higher?"

And so on.  This is mostly the realm of smaller companies.  At larger orgs, you'll get a level, job title, or etc. with a salary range attached, they'll just figure out using their own internal metrics where you fit into their system, and you get an offer in the e-mail or whatever with "We want you to be an engineer II on our frombling team for $x and y shares of stock" or whatever.

But that's not a hard and fast rule.  My current job, during one of my interviews, we just had a little side discussion because we had the free time and they came back later with an offer for me based off that.  It's not necessarily adversarial or anything.  And I encourage you to find out your rights, because for instance some states don't allow them to consider or ask about your salary at previous jobs, and some states require them to tell you the range if you ask for it, and things like that.  If you get to this point I'd say you're likely to get an offer a long as you work with them and aren't shooting for the moon.  It might not be what you want, but it's likely to be an offer.

My Blog
Twitter: @ajhicks1992

2020-03-21 11:24:38

My personal opinion is that anything "pro" can be really soul sucking if you started being a programmer as a hobbyist. It's like being forced to read a book you loved as a child for school for academic reasons. It's just not the same when your on someone elses time, and your at the mercy of how much someone else thinks your time is worth in dollar amount.

2020-03-21 15:39:00

There's already a lot of good points contributed here. I'll try to add my two cents.

I am currently doing a sandwich year internship at a major global investment bank in the middle of my university studies.

Some things about job hunting from my experience is be prepared for it to take months and to apply to a dozen companies before being asked for an interview. if you are applying for an internship or entry-level position, then there is an absolute crap ton of candidates, so the big companies have mountains of resumes to sort through, so dont get discouraged by not getting even an email reply after only sending 2-3 applications.

Have a look through job ads and look at the kind of skills and technologies that employers are interested in. This will give you a good idea about things it is worth investing your time in learning to make you more valuable in the job market. A insatiable thirst for learning new technologies is really important in this field, from my experience.

Make sure you have all the basic general topics covered, because these come up again and again in interviews (especially for internship/entry-level jobs at big companies). Things like concepts in relational databases like primary keys, foreign keys, and how to write SQL. How the internet works . TCP, UDP, NAT, IP, different layers of network model, DNS.

Algorithms and data structures. definitely know sorting algorithms and arrays, linked lists, trees, stack, maps/dictionaries, sets. Be able to reason about space/time complexity ( at least things like that gettting head of linked list is O(1) and getting last element is O(n)).

For big companies interview questions for the above topics come up super frequently.

It's probably good to have experience with different paradigms. Like experience with a dynamicaly typed, interpreted language like python,  staticly typed object-oriented Java, low-level C. I will never forget how I completely won over an interviewer asked me to compare python and Java and was really impressed by my ability to compare the relative strengths and weaknesses of the different ecosystems and paradigms.

Softare engineering is becoming more and more polyglottic and learning a new language or technology is never a bad thing (unless you are learning a new language each week). Developing things for the web require proficiency or at least basic understanding for more than a dozen languages: front=end programming (javascript, JQuery, React, Angular, exotic stuff like Elm and purescript), semi-structured data (HTML, XML, json), CSS, and ofcourse some back end language (any major language).

But dont feel like you need to be a expert before applying for a job. Working at the job will facilitate a lot of the learning. Just be confident with a real language (not BGT) have a CS degree or some projects under your belt and start applying to as many jobs as you can. You want to start doing as many interviews as possible, since chances are you will make major mistakes at first and will get better at them over time. Interviews are a skill just like most things. Also keep track of questions they tend to ask, identify your gaps, and study to fill them in preparation for your next future interviews.

2020-03-21 16:57:16

@17
I make $130000 with unlimited vacation and equity.  Equity is a nice way of saying that unlike many other careers, being a millionaire in 5 years is thinkable.  Not likely but thinkable.  Certainly not something I rely on.  But I can look you in the eye and say it's on the table.

Within the next 5 years I'll probably be doing $150000. Or better.

Programming for someone else can be soul-sucking, but then there's the good jobs like mine where it's fun and I work with cool people plus all of the above, and even the soul-sucking places pay that much.  Indeed, Amazon is about as soul-sucking as they get, but they'll give you this level of salary with my level of experience if you get in, plus stock which you can turn around and sell just as soon as it vests for even more money.

Mind you I'm almost 30 and have like 5 years of experience doing one thing or another, plus a college degree.  You can't walk in and just expect this much on day one.  But the money makes up for any soul-sucking that might exist, and honestly programmer jobs are way better than my friends who work at restaurants for minimum wage, where part of their job is being yelled at by everyone (literally) and they work way more than 8 hours a day.

back when I bothered to put the energy into pushing back against BGT, these numbers were a big part of why.  If this community had its act together for the last 5 years or so these circles could literally be on their way to being the richest group of blind people on the planet.

My Blog
Twitter: @ajhicks1992

2020-03-21 17:52:18

Eh, it occurs to me that I have no idea what I would do with all that money these days. I can restore my house's HP with a year or two at what I've been making. It's been made abundantly clear that no amount of money is overcoming the problems with my games, other than maybe sound quality and hosting. A new piece of tech might be more of an annual thing than a monthly thing, but who is buying a new computer / Braille display / phone / gaming device every month?
But if you have any ideas other than charity for what one could do with that kind of cash, feel free to share. Though it's kinda off topic. Maybe this calls for a "what would you do with a million dollars" thread?

看過來!
"If you want utopia but reality gives you Lovecraft, you don't give up, you carve your utopia out of the corpses of dead gods."
MaxAngor wrote:
    George... Don't do that.

2020-03-21 18:14:43

At 19. What do you do? I’m actually curious. I know it has something to do with programming but are you a backend designer or something?

2020-03-21 18:22:47

@20
You quit.  You can live, for the rest of your life, on about $1.5 million by my calculations.  It's the power to fuck off.  It's the power to only take work you want to take, and to walk away from any situation.

Your money in retirement/quitting/financial independence comes primarily from stocks and dividends invested in a conservative fashion.  Figure that your salary is around 4% of your retirement savings.  1.5 mill is around 60k a year.  Hold out for 2 mil and you're doing 80k a year, which by the way is currently below the long-term capital gains threshold, meaning that if you play your cards right it's tax free.

If you don't do it through equity, which as I said only really helps if you win the lottery, it takes about 20 years at $100000 from anywhere that's not Seattle, about 20 years at $130000 in Seattle.  You can do it faster if you live more conservatively than me (i.e. get a roommate, etc).  most careers take much, much longer, if you retire at all.

And, it doesn't mean quitting.  It just means that for the rest of your life the only person who decides what you're going to be doing is you.  I personally see me actually continuing as I am, only this time taking the even riskier startups or running my own company, because at that point it's like a real life game--it can fail spectacularly, but you're still fine, you don't have to worry about where the food is coming from.

And that's what you do with a million dollars.

My Blog
Twitter: @ajhicks1992

2020-03-21 18:31:29

@21
3 years ago, I was making $100000 from Florida, doing Django backend at what I consider a shit job in hindsight (i.e. on call 24/7).  Then we did our own contracting company for a while.

Nowadays I'm doing C at a company called backtrace.io.  We have a custom database among other things.

But frankly, stay at Google for a few years and you can make more than I am in less time than it took me to get where I am.  I like my job for a lot of other reasons besides the pay--Google certainly isn't giving you an amazing vacation policy and you sure as hell aren't working from home, and we have a great and supportive company culture.  Plus, going startup does come with the equity, and if you land at a good one that goes public, that's a very large chunk of change.  Don't chase the equity lottery, as most don't have IPOs, but if you land at a good one that you believe can succeed, try to exercise your shares because they'll be worth 10x what the exercise price is if the company succeeds (and you get to keep them, as long as they're exercised first, even if you quit and/or are fired).  I'm happy because I get to retire in 20 years and I'm not super stressed, so when chasing the number don't forget about that.

All this said though, some of what comes into comp depends on the country you're from: what I'm discussing is really only applicable to the U.S. market.

My Blog
Twitter: @ajhicks1992

2020-03-21 18:41:48

did you get a computer science degree? And if so how hard was it? i’m looking into this kind of thing and I have been for a long time

2020-03-21 19:22:37

@24
Yes, I did.  How hard it is depends on your college and your country, followed by how good you are at math and science stuff.  A CS degree comes with a good bit of theory: linear algebra, calculus, physics, some CS-specific math.

It's not required, but as I said earlier in the thread, it does open some doors by default that you otherwise have to try hard to open.  You can do without though, if you can get a resume some other way.

My Blog
Twitter: @ajhicks1992