Ask HN: How can I become a self-taught software engineer? - <AUTHOR> I don't know where to exactly start. I was thinking of first learning Python by studying from the book "Automate the Boring Stuff." Then for the actual CS stuff, maybe taking the online course CS50 offered by Harvard, then moving on from there.
But after learning Python then what? I'm not exactly sure where my interest lies or what I actually feel like building. Thus, I'm not sure if I want to go the web route, which seems common to many, or going some different area?
I looked at the Google Software Engineer minimum qualifications, just to get an idea of areas to pursue. It reads: "Experience working with two or more from the following: web application development, Unix/Linux environments, mobile application development, distributed and parallel systems, machine learning, information retrieval, natural language processing, networking, developing large software systems, and/or security software development."
I'm not so fond of mobile development, and web I'm unsure of. From those areas which are most accessible to a non-CS/Math/Engineering degree holder (bachelors in biology)? I believe Machine learning and NLP are more suited to Masters/PhDs? So maybe they are out of the question.
Any advice on how to tackle my journey in becoming a Software Engineer? Maybe an outline on how to approach my learning in steps? <comment><USER3> Start doing it.

Pick a project. Don't spend time agonizing over what sort of project it should be, you'll find out if you like it or not once you've started doing it, and if you picked the wrong project or language you'll better internalize the reasons why by actually ramming your head against those things yourself.

I'm going to disagree with the majority here and say don't pick a small and manageable project. Pick a project that inspires you. As long as you can maintain the motivation and actually put fingers to keyboard over and over again, that's all that really matters because even when you fail you'll learn. More importantly, you'll be forced to realize how large projects must be broken down into smaller projects and tackled piece by piece, and you'll gain a much deeper appreciation for the sheer amount of work the things you want to do really take. If you're anything like me, you're going to fail your first project, and your second, and many after that, but you will learn something invaluable every time.

Consume the opinions of programmers voraciously. Not just one programmer, read as many conflicting opinions and ways of tackling problems as possible. Read HN. Read stackoverflow. Read github comments. Programmers are deeply passionate about various aspects of programming, and understanding why is an important part of growing as a programmer.

Realize that everything you could possibly seek to understand is publicly available on the internet, if you know where to look and who to ask. Everything.

I have more opinions on this, but since it seems we all do I think I'll cut my advice short there :P.

<comment><USER4> > Pick a project that inspires you

That's all very well, but until you have experience of languages and associated tool chains, libraries etc plus knowledge of OS stacks, networking and so on its difficult to know what is possible and how you'd go about achieving your goal

<comment><USER3> The point is that you don't. You'll only know after you've done the legwork and rammed your head against the problem. Maybe your first project is impossible; mine definitely was, but that's not the point. The point is to learn.

<comment><USER5> I'm on my fourth or fifth personal project, first four or so failed. Now as I'm learning design patterns it gets a little easier each time. Just keep writing bad code every day, and each time learn why it was bad lol.

</comment></comment></comment></comment><comment><USER6> My advice: Do. As in make shit. Pick something you think should exist then figure out how to make it. Pick a reasonable goal; ie don't attempt to build a self driving car, at least not straight way :).

I follow what i call Just in Time Learning, I learn what I need to get the job done. I started with graphic design transitioned to web and application development, and currently an cloud infrastructure engineer. Leverage expertise you develop in one field to move to an adjoining field. Currently playing with cryptocurrencies and ML.

Leaning for the sake of learning is boring and imo; at least for me, not very effective.

</comment><comment><USER7> Mostly-joking-but-I-would-absolutely-make-good-on-it Offer: I will ask you one obnoxious* question at a time, with no deadlines, until you are a self-taught software engineer.

The first question is: What is the sum of the numbers from 1 to 1024. Please use Python, not the Gauss/two-triangles-make-a-rectangle mathematical method.

* - "obnoxious" means it's a leading question: it's simple to state, but you might have to learn a bunch of crap to even really fully understand the question.

Sample far-future questions: \- Does it seem magical that you can turn an NFA into a DFA? \- How does a shell pass stdout from one process to the stdin of the next? \- Why is the Frame Pointer technically unnecessary, but useful? \- Why do people complain about Go's nil pointers? What's wrong with them?

<comment><USER8> That is a kind offer and probably a good way to go, but I have a small objection: I think at the end of it, OP would be a zellyn-taught software engineer, not a self-taught software engineer.

<comment><USER9> Software engineers cannot be self taught, at least not in any of the countries where engineer means something.

<comment><USER10> Lower "e" engineer. In Canada, like many places, the title is protected. But in reality, it's not often necessary for software. A significant number of the roboticists where I work do not have an engineering degree.

<comment><USER9> If the title is protected, it's not possible to be an engineer without having the degree.

Anyway, the author was posting google requirements. More than 80% of google developers have a master or more.

<comment><USER11> Uh, that's not true at all - most Googlers don't have a masters. Do you have a source?

<comment><USER9> I can't find the source again.

Instead, here some numbers showing that 76% of ALL Google employees have a degree. [https://www.cnbc.com/2017/07/28/this-tech-company-has-the- mo...](https://www.cnbc.com/2017/07/28/this-tech-company-has-the-most-highly- educated-employees.html)

The saying that one doesn't need a degree to get a tech job is nonsense. Do the test: Ask one guy working in one of the major tech company how many of his direct neighbors have a degree, most likely it's all of them.

<comment><USER12> > 76% of ALL Google employees have a degree.

> The saying that one doesn't need a degree to get a tech job is nonsense.

These statements directly contradict. 24% of ALL Google employees don't have a degree.

> Ask one guy working in one of the major tech company how many of his direct > neighbors have a degree

I know that I was hired into my current role without having a CS degree at the time [1}, based solely on my open-source portfolio.

[1] I now have a BSc in CS because I work part-time and attended university in parallel.

<comment><USER9> The statements don't contradict. Read the source, the other 24% are marked as "unknown" status, not as not having a degree.

Furthermore, that's the statistics for the whole company. It's higher for tech jobs. It's higher for younger folks. It's higher in countries where degrees are affordable.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> If you don't know what you want to build then I would stop everything you're doing and figure that out because without a clear goal in mind, then you're just going to fizzle out very quickly.

I've been a self taught programmer for the last 20 years (and by self taught I mean no formal education and just learned everything from experience, books and documentation).

One thing that stands out to me is nearly everything I've ever learned came from not thinking "I should learn Python" but instead "I want to write this app because I need it".

You might want to read this post: [https://nickjanetakis.com/blog/how-to- quickly-learn-a-new-pr...](https://nickjanetakis.com/blog/how-to-quickly- learn-a-new-programming-language-or-framework)

<comment><USER14> You need some level of technical understanding to be able to determine what is possible. The complexity from a Sunday afternoon project to full time job jumps very quickly. Build a spell checker? Dictionary lookup. Build a context aware spell checker? Learn NLP.

<comment><USER15> You should always start with something basic and only start using advanced techniques like NLP when the need is apparent. They require a more thorough understanding of the problem to be put to good use anyway.

</comment></comment></comment><comment><USER16> As as self-taught engineer who's now working for one of the big 4(or is it 5 now?) let me suggest a couple things:

1\. Side-projects are your route into the industry. You're looking for a company that's willing to take a risk on a non-traditional candidate and showing that you can deliver something is huge. Find a problem that you enjoy and solve it to a high level of quality. A lot of software engineering is being able to put in the effort to actually get something to a shippable quality.

2\. If you're near a metro area, network. There's tons of meet-ups for various technologies, find one that interests you and attend. Your biggest barrier to getting through HR is the lack of a degree, having a direct connection to someone gives you a very good chance to bypass it.

</comment><comment><USER17> First, why do you want to be a Software Engineer? Higher pay? Do you like coding? Interested in puzzles?

Second, I would just start small. Automate the boring stuff will get you in the right mindset for being able to factor out repetitive tasks by thinking about them as algorithms. In my opinion, algorithms are the original _essence_ of what makes computer science a science: it's what Church and Turing (two google-worthy figures in our fields history) first formalized on their pursuit to define what it means for something to be computable.

Once you can break a problem down into an algorithm, you can write a computer program to solve that problem. That is the power of writing code: if you can understand it algorithmically, you can delegate the task to a machine. This takes time and lots of practice!!! I would focus on trying to do this over and over until it's natural. Once you feel comfortable in Python, try learning another language and see how much easier/harder writing programs in that new language becomes.

Third, you shouldn't feel like Machine Learing is out of the question. [http://course.fast.ai](http://course.fast.ai) is a MOOC specifically designed to prove that ML is indeed something anyone can play around with. (I'm just beginning the course, and I'd recommend it after a year of coding under your belt and have a good comfort with using a unix-like terminal).

Good luck, and keep practicing!

<comment><USER17> I forgot to mention, let your learning process be _organic_. Let yourself break off into tangents as you learn new things. Pretty soon you'll have 25 tabs open as you're clicking through Wikipedia, github, and youtube. This is good because you'll be able to get a breadth of knowledge as you deepen it in a specific area. Just be sure to know when you need to go back and resume the original thing you started with (which usually can be determined by you're level of excitement and interest as you toggle through the many tabs you have open with ctrl-tab or ctrl-alt-tab).

You'll learn faster if you follow things that are interesting to you. Don't learn something just because you think you have to (in less you absolutely cannot progress without getting past that obstacle in your understanding). This way you'll end up with a body of knowledge that relates to your interests and experiences. Use that to branch out more tendrils of knowledge. Its a very fractal-like growth process.

</comment></comment><comment><USER18> See if you can get anywhere with Python first. Making a 5 year plan before you even get started isn't going to help you do anything except stall.

<comment><USER19> ^^ what he said. You need to get your feet wet and see if you even like programming before deciding on it as a career. And know that programming as a hobby is something entirely different from career software engineering, meetings, JIRA, and all that (sometimes) nonsense.

</comment></comment><comment><USER20> i'm self-taught, ph.d. dropout in math. i work for a unicorn in silicon valley; i've done full-stack development and lately devops and cloud infrastructure. learn enough python/java to go through the entirety of [http://nand2tetris.org/;](http://nand2tetris.org/;) this will help you understand basic computer architecture. from there, you can pick and choose from among the courses in [https://teachyourselfcs.com](https://teachyourselfcs.com), but i'd recommend taking at least computer networking and operating systems. ds&a is good and a prerequisite for interviewing at most companies.

it would help to do this in parallel with some form of employment, as working will teach you practical software engineering skills that you'll never get from reading books. but you'll be more time-constrained, so you'll have to have really good time-management skills.

also, being around good engineers is a form of education. good co-workers can help expose gaps in your knowledge and skills, which you should strive to amend.

<comment><USER21> Would also suggest this route if you're the type of person who prefers a "bottom-up" style of learning, as in, starting from the absolute primitives and incrementally increasing your toolbox of knowledge with a combination of learning more primitives, and learning how to compose those primitives.

Learning basic computer organization (through nand2tetris - highly recommend this project!), while cultivating your intuition for what's possible in the world of data processing/manipulation (by learning algorithms and data structures, and the formal language of how to reason about complexity in this domain) will give you a huge advantage over the school of people who refuse to ever delve into the "implementation details" and just abstract everything away.

Learning the fundamentals of operating systems, networking, and database theory, IMO, also pays off immensely. I can't tell you how many thousands of engineering hours I've seen wasted because of engineers I've worked with who haven't taken the time to learn these primitives making horrible decisions in either "using the wrong tool for the job" or not even having the knowledge to reason about the feasibility of a proposed solution... and this is at a "big 4" company.

It's a lot harder to buy into "hype", or be sold on bullshit in this industry when you're able to decompose a system into its most fundamental elements and have the tools to reason about them.

</comment></comment><comment><USER22> Get a Raspberry Pi computer and start working with the educational tools, projects, and languages they support and those built and documented by their community.

You don't need to learn a specific language as much as you need to learn basic concepts to begin with and the Raspberry Pi project offers great resources for that along with language specific resources to play and learn with.

And don't let the "it's for kids" angle put you off. Yes, the project does focus on teaching kids to program and integrate hardware but most of those computers are sold to adults who use them to "hack" and learn and develop on, and yes, we adults use and learn with the same resources "kids" do.

[https://www.raspberrypi.org](https://www.raspberrypi.org)

<comment><USER23> How good is Raspberry Pi for understanding systems at a deeper level? I'm a mid-level dev and I've taken computer hardware/systems classes (including the Nand To Tetris course), and have considered diving into Raspberry/Arduino to practice deeper systems level concepts. Can you speak to that at all?

<comment><USER22> I've not got into system level concepts myself but there's a lot of others who have worked on that. You'll find a lot more info at the Raspberry Pi forums but here is a bit to get you going.

This book is co-written by Eben Upton, founder of the Raspberry Pi Foundation:

Learning Computer Architecture with Raspberry Pi: [https://play.google.com/store/books/details?id=9aTkDAAAQBAJ&...](https://play.google.com/store/books/details?id=9aTkDAAAQBAJ&rdid=book-9aTkDAAAQBAJ&rdot=1&source=gbs_vpt_read&pcampaignid=books_booksearch_viewport)

Mastering the Raspberry Pi:

[https://books.google.com/books?id=1FUnCgAAQBAJ&printsec=fron...](https://books.google.com/books?id=1FUnCgAAQBAJ&printsec=frontcover&dq=mastering+the+raspberry+pi&hl=en&sa=X&ved=0ahUKEwj97vG1nJLYAhWL7IMKHcu2BfYQ6AEIKTAA#v=onepage&q=mastering%20the%20raspberry%20pi&f=false)

This is a post in their user forums with links to additional resources:

[https://www.raspberrypi.org/forums/viewtopic.php?f=72&t=7226...](https://www.raspberrypi.org/forums/viewtopic.php?f=72&t=72260&sid=bf2b38990b100853ea06f207a59eb609)

<comment><USER23> This is awesome. I'm excited to dive into these. Thanks very much!

</comment></comment></comment></comment><comment><USER24> When I started teaching myself I never thought it would take me so long. I made two mistakes: I didn't have direction (which you solved by asking a question) and I didn't build stuff.

From this point forward you ought to pick one thing and build stuff. When I say pick one thing, I mean one learning resource at a time. Whether it is "automate the boring stuff" (which is a great resource I haven't read) or one of the resources that I'm linking to (they are different resources that have been suggested on HN in the past), or a suggestion from another comment. Pick one and work on it. It's all about making a decision and sticking to it until you have enough information to make a better decision.

Find someone you can talk with about this stuff. It can get lonely if you don't know anyone who knows about this stuff. I'm available and would even work on some of the material or courses with you, especially the last two links.

As another user mentioned somewhere below, you will feel like bashing your head against the wall. He/she wasn't kidding. Once you get past that feeling, which will take a very, very long time, you will have overcome the hardest hurdle.

[https://github.com/MichielDerhaeg/build- linux/blob/master/RE...](https://github.com/MichielDerhaeg/build- linux/blob/master/README.md)

[http://exercism.io/](http://exercism.io/)

[https://mitpress.mit.edu/sicp/full- text/book/book.html](https://mitpress.mit.edu/sicp/full-text/book/book.html)

[https://github.com/ossu/computer- science/blob/master/README....](https://github.com/ossu/computer- science/blob/master/README.md)

Edit: for anyone else in OP's shoes, feel free to contact me as well.

<comment><USER24> For B4tman. I don't quite understand why you got down-voted, besides maybe because your question has two opposing thoughts, which may or may not be self evident to your self.

Let's break your sentence down.

"How do you start a new/big project? Lets say I want to read a codebase on github which is written in js. How doI go through it, given that I don't know much js yet?"

The first part about how to start a new big project has nothing to do with reading a codebase. And the part not knowing much js yet means you shouldn't be starting a big project. You could, if you wanted to. Heck, I've done it but nothing good has come out of it besides learning that, baby steps are sane steps.

So, we have two questions. 1- How to start a big project? (whatever big may mean to you). 2- How to read a codebase.

Reading a codebase will help you understand project structure. It will also help you, that is, if you find a line of code you don't understand, break it down, research what it does and continue reading, improve your coding abilities. In short, how everything ties together. That practice will help you understand how to start a new project.

But the first step you ought to take is, if you are going to go down this road, is to learn how to ask questions: [https://stackoverflow.com/help/how- to-ask](https://stackoverflow.com/help/how-to-ask) [http://www.catb.org/esr/faqs/smart- questions.html](http://www.catb.org/esr/faqs/smart-questions.html)

</comment></comment><comment><USER25> My first question would be - why do you want to become a software engineer?

Back when I went to Polytechnic (around 1981) things were a lot easier. If you were into business type computing you did some kind of computer studies degree, which covered things like COBOL and business systems (banks, insurance companies etc). If you weren't into that scene you ended up like me in Electronic Engineering. I was fascinated by electronics to the point where I knew I had to study it. Then if you were into microcomputers you bought yourself a Z80 and a few TTL chips and built one. Now there are a multitude of things to go into to the point where your options are almost endless - <USER2> probably leads to "analysis paralysis" in many cases...

Which brings me back to - why do you want to become a software engineer?

I would start by taking a long hard look at your interests and aptitudes. Software engineering can be merciless if you don't have the aptitude for it and interest in it.

You could dip a toe in by learning Python. Actually the book you mentioned is very good as it shows you how to do practical things in Python - I have found it a useful source of reference. You wouldn't have to work through all of it. You could maybe use it to whip up a simple web scraper or process some data from Excel and just see how it feels. In some ways when you are starting out it doesn't matter too much what you do as long as you do something.

One final thing - you didn't say where you were starting from. Did you imply you had a degree in Biology? It's not fashionable to say it these days but by far the majority of software engineers I meet today have what you my call "traditional" backgrounds in that they came in through getting a degree in some kind of software/comp sci subject, and possibly a masters. Sure there are a few hot shot self-taught programmers around but in my experience they are the minority.

p.s. I shifted out of electronics and into software development by teaching myself TurboBASIC and then C and assembly language, and then went to work as a software trainer and later engineer, so it can be done.

</comment><comment><USER26> Top three courses that solidified my ability to think like a programmer: 1\. Logic 2\. Data structures and algorithms 3\. Discrete Math

From there, you are right on that python is a good language to learn first. Also w3schools.com is a helpful place to learn enough to get by in any web languages you would likely encounter. I have found that you will be expected to know some variant of C, so probably that.

That's really it, from a 30yr old $100k/yr female software engineer's standpoint.

</comment><comment><USER27> You can just recreate a CS degree and build yourself a foundation from which you can build anything.

Before anything else, check out Coursera's _Learning How to Learn_ course.

You can jump right into CS50 which will provide you with a very strong foundation.

If you wished to continue developing your C skills from CS50, you could work your way through K&R, Hanson's _C Interfaces and Implementations_ (in conjunction or following working through material on algorithms and data structures), and learn lower level details by working your way through Bryant and O'Halloron's _Computer Systems: A Programmer 's Perspective_.

You can learn proofs from Hammack's _Book of Proof_ , freely available online. From there, you can learn algorithms and data structures from Stanford and/or Princeton's courses on Coursera.

The above would be the equivalent of a strong CS minor.

From there, you could dive into pretty much anything. The recommendations from [https://teachyourselfcs.com/](https://teachyourselfcs.com/) are spot on. Between Coursera, edx, Stanford's Lagunita, and Udacity, you can learn pretty much everything. Be sure to check out Udacity's courses on debugging and testing, as well as anything Peter Norvig teaches. Lagunita will be helpful for CS theory, Computer Networking, Compilers, Databases, and Data Mining.

If you were to complete all of the courses I explicitly mentioned, you would have the equivalent of a CS major as long as you study discrete math (Rosen and Epps are the standard texts) and Operating Systems, too.

<comment><USER20> How do you know the suggested paths are equivalent to a CS major?

<comment><USER27> By having majored in CS, and having compared various CS undergrad curricula.

<comment><USER20> Thanks for the reply.

</comment></comment></comment></comment><comment><USER28> Are you asking how to learn how to code or how to obtain a job as a developer?

If you're asking for the former, then looking at resources like CodeAcademy, various "The Hard Way" manuals or even Reddit (/r/dailyprogrammer) will get you there.

If you're asking for the latter, then the answer is less technical than you might think. The only way to do that , that I know of, is to get an "in" from someone or somewhere. It will be extremely hard to apply for these sorts of jobs without experience, but you'll need to gain the experience to start applying. You'll need to network around and find someone that's willing to take a chance on you.

Alternatively, you can find an opportunity within your current job to write software (is there a process that's slow and annoying? If so, then there's your way in; usually, the answer is "yes") and find a recruiter willing to work with that experience after a few months on that project.

Alternatively still, you could work for a software consulting firm as a very entry-level consultant. You won't get paid a lot and you'll probably have to travel, but you'll gain a lot of corporate experience in a very short amount of time. Getting in through this route is also tough, as there is a lot of competiton.

Good luck!

</comment><comment><USER29> Do not read a book, or tutorials. Come up with an idea... something you want to build. Pick a framework and build it. (if going the web dev route).

I did this in 2012 (php/laravel) and now earn $50/hour as a freelancer. I could probably earn $70-80 or more but I'm a little desperate for clients right now.

I started out reading/watching tutorials but they bored the shit out of me... So I just decided I was gonna build something. That's the best way of learning, sure learn the basics ifs/thens and other control structures but you don't need to know everything about programming to get started as a developer the rest will come with time.

</comment><comment><USER30> Read books and articles. Read and write a lot of code by trying to solve a problem. When you have a problem, study to solve it in the best way possible (that even means rewriting from scratch if you think so). Try to deploy a complete product online in some way, even the simplest one. This should help finding the spot that fits better for you. For example, working on frontend or backend, focusing on security or UX... there are a lot of specific topics you might want to dive into based on your tastes. After some time, you'll be able to drive your knowledge by your own. Asking now will not help that much.

Good luck ;-)

</comment><comment><USER31> Being self-taught means being a self-direct learner.

The advice I give to those starting out programming is to pick something as simple, universal and quick to learn. Javascript and use it to create experiences for the web and/or mobile.

Don't dive into the deep end of Javascript (ie., React). It's perfectly OK to start on the shallow end and work your way through, or use something well documented and supported by communities that excel at creating beginners.

I'm becoming a fan of Daniel Shiffman's work, he has some great videos on learning both programming as beginners and scaling it up very quickly. His examples using tolls like p5.js will help you get productive much faster.

[https://www.youtube.com/user/shiffman/videos](https://www.youtube.com/user/shiffman/videos)

What's critical is to learn to complete small projects that you find interesting or help others and build some momentum. I have developed large enterprise systems for over 20 years, and they are all made up of small projects.

There is a high from finishing a project, no matter how small that fuels you to continue.

From there you'll slowly go to do more back end work, and then you'll realize all programming languages do the same things in different syntax.

</comment><comment><USER32> Do fun projects! After my freshman year of college I switched from biology to self-taught programming, and I tried to find projects that were the intersection of those two interests. Genetic algorithms, neural nets, and Boids took me a couple weeks to implement each, but the internet is full of good tutorials and the end results are quite nice to look at. Anyway, yeah after self-teaching for two years, I realized there's a level of competence that I probably wouldn't reach if not for school, so I transferred to UC Berkeley to get a degree.

Best of luck! It will be hard, but if you program every day for a couple months you will absolutely be on your way to becoming an engineer!

Genetic algs: [https://blog.sicara.com/getting-started-genetic- algorithms-p...](https://blog.sicara.com/getting-started-genetic-algorithms- python-tutorial-81ffa1dd72f9)

Boids: [https://processing.org/examples/flocking.html](https://processing.org/examples/flocking.html)

Neural nets and deep learning: [http://neuralnetworksanddeeplearning.com/chap1.html](http://neuralnetworksanddeeplearning.com/chap1.html)

</comment><comment><USER33> Let's assume you want mean you want to get paid as Software Engineer, either as a temp/contractor/consoltant or an employee. You will have achieved this when you get paid for software engineering work you have done or intend to do. So how does one make that happen? As a professional software engineer who is self taught, here's what I did...

tl;dr - spent two years learning to code, working as needed to pay the bills, and then got software job by applying to software jobs

1\. Accepted I have no real clue how to proceed, and commit to trying something

2\. Picked a language that seems to be an essential skill for many entry level jobs

3\. Studied a little bit (coded through a book or two), applied to jobs, and get no response (maybe a couple phone interviews)

4\. Locked myself in a room for 1 year, coding 40+ hours per week (let's say I spent 2000 hours coding on anything I found interesting)

5\. Applied to jobs, saying I have 5 years of experience in my language of choice (technically true, as I'd goofed around for 4 years prior with a bit of code here and there), getting many interviews, and no offers

6\. To pay the bills, I applied for & got a job doing tech support at a software company, and continued programming at work, nights , and weekends for another year (probably putting in another 2000 hours of learning to code)

7\. Applied to jobs, saying I have 6 years of experience in my language of choice & using verbiage I picked up doing tech support, getting many interviews & 2 offers

8\. Took best offer, and was now professional software engineer who was self taught

<comment><USER5> As someone who is a year into obsessive self study, but who often feels dejected at the challenge and what feels like slow progress, it's reassuring to read this and see how long it took you :)

<comment><USER33> You just gotta really want it :) If you've been coding this long, I suspect you have what it takes to make it if you want to!

<comment><USER5> Thanks! I work as a Data Scientist now, but my start was heavier on the econ/data side, with the goal to push more into the data-dev world. The only thing I hate more than spending all my time writing bad code, is the idea of not spending all my time writing bad code.

</comment></comment></comment></comment><comment><USER34> I did cs50 and can highly recommend it. It is a very engaging, well organized introduction to basic computer science concepts as well as several languages, and will give you exposure to a variety of different applications from implementing data structures in C to building web apps. You'll get a sense for 1) if you like programming (since it is one of the more engaging courses that actually deals with CS concepts rather than just engineering) and 2) what sort of projects you want to work on

I found that, while the first problems sets, all in C, were more challenging and not super relevant (implementing a spell checker, resizing BMP files), the later problem sets are much easier and do more useful things (building simple web apps, interfacing with APIs)

</comment><comment><USER35> I am self-taught from the age of 12. I started with Visual Basic 3.0. Then it was HTML, CSS, and JavaScript. In college, I traded in a math requirement and took Python instead, and aced it. I did love Python but not enough to program in it. A few years after college, I learned PHP and MySQL.

So.. where and how did I start? Long story short.. I dreamed about it. The longer version is that I would open up VB and just write a few lines of code.

Msgbox "Hello World!";

I would later learn how to do mathematics in programming, receiving input, then output something, and then I learned If Then statements.. and how to do loops.

Basically what I'm getting at.. make sure you grasp all the basics.

As far as what you can do with what you have learned... honestly, don't google the idea. Unless you come up with the idea to solve your own problem... you'll likely only be creating things for other people.. and that's great. If you want to do that to start.. go do it.

I got back into programming when I got hired to fix auto body shop software in Visual Basic 6.0. Although I loved the job, I hated the boss, and I would eventually leave there... best decision ever... I went straight into HTML, Javascript, and CSS, and got a job working for the media.

As for side projects... PHP all the way.

Anyways, if you're looking to eventually do your own thing with your programming knowledge, read this article I wrote that may give you some direction.

It's basically about trying to solve your own problems... and then finding other people who have that same problem rather than going and googling ideas about what you should create.

[https://medium.com/@OneTruConscious/solving-a-problem- isnt-a...](https://medium.com/@OneTruConscious/solving-a-problem-isnt-always- solving-the-problem-9299e68343aa)

My future goals? I'd love to just keep creating SaaS and pay-as-you-go projects and run those as my own business.

</comment><comment><USER36> I am. Been in the industry since 1998. However, if Google is your standard you're trying to attain, I suspect you won't have much chance without a degree. And that is ok. Most programmers DON'T work at Google, FB, Uber, etc.

</comment><comment><USER37> I would add the most important thing is to start getting paid to learn programming. This doesn't necessarily mean getting a full time job as a software engineer (yet) but smaller more manageable things. For example, take a boring task you already do in work or daily life and try and figure out how you could make it more automatic.

This will be slow, painful and frustrating at first, but if you spend the time banging your head against the wall now, and are truest motivated, it will take you where you want to go.

</comment><comment><USER38> Software development is a vast field, without countless options to explore later, far too many to give a good long-term plan at this early stage. As you say, what you need is a place to start.

There are many languages, each with their own pros and cons, but Python is a safe bet for your first one. It's useful in its own right, and it's also reasonably mainstream in its ideas and techniques, so you can learn a lot of transferrable programming skills. There are plenty of decent tutorials around both online or in book form.

If you're planning to follow the self-teaching route, I suggest that the single most important thing in the early days is to just keep writing code. The theoretical foundations are useful, and important for a lot of professional work, but IMHO there is no faster or more reliable way to kill a new developer's interest in the field than to bog them down with "doing things properly". You have to _make stuff_ , to experience to joy of programming and dispel the illusions about it being some sort of black magic. Everything else can wait, and this way when you do get to more advanced theory and more sophisticated tools and more carefully structured processes, you'll have enough experience to understand why those things are helpful (or, in some cases, why they aren't and you don't need to get bogged down with them).

You have to start with the "Hello, world" stuff. This is trivial, but it takes the important step of writing and running real code on a real system, and therefore knowing that you have the tools you need available. Any tutorial is going to begin at that kind of level in the first hour. But then over the next few weeks and months, my recommendation is to try a few more substantial projects in different areas to see what you enjoy, and for a while, just learn by doing.

If you enjoy things like computer graphics and pretty pictures, and you're comfortable with math, you could try something like rendering the famous Mandelbrot set, or generating a 3D landscape with mountains and lakes. As a novice, you can probably still write a program to do either of those things within a weekend with the help of online tutorials. This sort of exercise will give you a chance to exercise your basic programming skills, but it will also introduce you to essential ideas like how to use libraries of code that other people have written to do things like drawing on screen or reading data from a file or fetching data from an online source or countless other useful things.

If you're interested in gaming, you could try something more interactive. Try implementing simple games like snake, 2048 or Tetris. Again, these are projects you can complete within a few days, following a path many have walked before so there are plenty of hints available with a bit of searching if you need an idea of how to get going. These will further exercise your basic skills and use of libraries to avoid reinventing the wheel, and in addition you'll have to think about how to structure a non-trivial program that has some interactive input and output to deal with.

If you want to try some web development, you can write a simple database application. An address book is probably the classic exercise. You'll need to learn about a few other tools in addition to the pure programming aspect in this case: you'll need a server (even if it's just your own development PC) running both web and database server software, you'll need to figure out how your Python code fits in with those other programs, and of course you'll need to know enough basic HTML and CSS to build a simple front-end. That's quite a bit of non-programming knowledge, but on the other hand, again it's something you can find your way around within a few days and the experience will be valuable if you ever wind up writing almost any sort of server software, whether it's sitting behind a web site or not.

If you prefer native software rather than the web but want to try something more substantial, another classic exercise is to write yourself a simple text file editor. It doesn't need to be anything flashy, but again there will be interactive elements and you'll have to think about how to organise a slightly larger amount of code. You'll also have to deal with things like reading and writing files, which brings with it the possibility of things going wrong and needing to recover from errors, as well as working with larger amounts of data, where the simplest and most obvious structures for that data don't scale and you need a slightly more sophisticated approach. Again, these are all import general ideas that you'll encounter time and again, and while of course you won't yet know a lot of the more advanced techniques that real world software like this would use, you can start to develop an appreciation for _why_ sometimes the simple and obvious approach isn't effective enough and how more advanced techniques can be useful.

If you want something a bit more substantial that combines a few different ideas, you could try writing yourself a simple spreadsheet that can manage a big table, let you write some simple formulae to generate data in the cells (which introduces another important general programming skill, the ability to parse structured text input), and draw some simple charts of the data, as well as reviewing things like saving and loading data either using files if you do it as a native application or using a database if you do it as a web application.

If you try a few different projects like these then somewhere along the way you will also start to run into recurring questions about how to organise the structure of your code, how to investigate when things aren't working properly, how to keep track of changes in your code over time, how to combine your own code with the tools provided by your programming language and/or libraries written by other people, where to find more detailed information about your languages and tools and how to navigate that information, and so on. At that point, you should be in a better place to start exploring more powerful tools and techniques on your own. Hopefully you'll also be starting to get a feel for which areas of programming you do or don't enjoy, and can branch out into other areas like mobile app development or machine learning or natural language processing or making big data visualisations whatever else takes your fancy.

Around that time, you might also like to experiment with additional programming languages. I would recommend trying at least one more that is quite similar to Python, so you can see how much of what you've learned transfers around between similar languages, and at least one that is very different, because there are vast areas of the programming landscape that Python doesn't really address but other languages and tools do. For example, it would be hard to go wrong with learning a bit of C at that point, both because it's also widely useful if you're working closer to the metal (embedded software, operating systems, networking, device drivers, etc.) and because C is the _lingua franca_ of the programming world and if you ever need to build larger systems that involve multiple programming languages then knowing C will almost always be useful for understanding the bridge between them.

Hmm... That turned out to be a much longer comment than I expected, but I guess it sums up my general advice to new, self-teaching programmers fairly well. Good luck!

</comment><comment><USER39> > I believe Machine learning and NLP are more suited to Masters/PhDs? So maybe > they are out of the question.

Don't exclude yourself based on preconceptions. Here's a great resource: [http://datasciencemasters.org/](http://datasciencemasters.org/)

</comment><comment><USER40> I really like [https://teachyourselfcs.com](https://teachyourselfcs.com)

Don't give up, I'm self-taught too. Started my journey a year and a half ago (soon after finishing art school). I'm now finishing up my first engineering internship and looking for full time.

</comment><comment><USER41> Hi, I am too learning Python using the book "Automate the Boring Stuff", aiming to become a self-taught programmer.

If you want to exchange learning material, do some pair programming and discuss programming problems, you can send me a mail at coding[dot]dahu[at]gmail[dot]com.

</comment><comment><USER42> If you won't have credentials, you'll need to build standard real world stuff, with conventional languages. You aren't likely to do interesting stuff for the next couple decades. Is that what you want? Head to (an interesting) University, if not.

</comment><comment><USER43> One side advice - if you happen to be using a Windows computer, ditch it; get any Linux one, or a Mac if you can afford it. Get used to the shell; learn the basic tools like grep, learn some coreutils; get generally familiar with all things Unix/Linux.

<comment><USER44> I find this ironic, given that as a long-term Mac user, I bought my first ever Windows machine in the process of becoming a self-taught programmer. Turns out there's quite a lot of demand out there for those able and willing to develop on Microsoft platforms.

<comment><USER43> > Turns out there's quite a lot of demand out there for those able and willing > to develop on Microsoft platforms.

Can't argue with that. So, you develop for/on MS platforms if you have to/like to develop for/on MS platforms (plus there's always demand for that, especially in the enterprise).

In the meanwhile, the rest of the world will keep developing for non-Windows -- not necessarily because they have to/adore it but just because in so many cases it makes the most sense so you don't even think about it...

</comment></comment></comment><comment><USER23> Open Source Society University has a good list of online courses you can take to approximate a computer science degree.

[https://github.com/ossu/computer-science](https://github.com/ossu/computer- science)

</comment><comment><USER45> This is a great book for any self-taught programmer: [https://bigmachine.io/products/the-imposters- handbook](https://bigmachine.io/products/the-imposters-handbook)

</comment><comment><USER46> I know this is old but this is what got me started: [http://www.catb.org/esr/faqs/hacker- howto.html](http://www.catb.org/esr/faqs/hacker-howto.html)

</comment><comment><USER47> An area you may want to check out since you've got a bachelor's in biology is bioinformatics. For a guide of what to learn, I like teachyourselfcs.com after one learns some basic programming.

</comment><comment><USER48> practice is the best way to learning, choose one project you are interested in, dig into it. if you find something/knowledge you missing, try to google, and some book to read, and then continue to dig, from the framework to design details. after you feel you understand this project, try to do some changes, and check the result whether it is what you expected, or not. and then, you already learn a lot.

</comment><comment><USER49> Read. Practice. Find problems, try to solve them. Build your network, and learn from their experience. Do this every day.

</comment><comment><USER26> Also learn the concept of state machines. Like how a vending machine or other embedded systems function.

</comment><comment><USER50> For hiring managers here, is a portfolio a good enough substitute for having no formal credentials?

</comment><comment><USER51> What is your current background and why do you think you want to learn SWE?

</comment><comment><USER52> Twenty years ago this was doable, but today most coveted jobs require a four year degree. You'll hit a ceiling going this route.

<comment><USER53> This might be true in law, medicine etc, not necessarily software. Sure, there are some big companies that will filter resumes based on degrees, but there are tons of companies that will hire based on skill set and expertise. Software development is still one of those jobs where one can go pretty far with skills alone (both technical and soft skills).

Also, "most coveted" in this case may be big companies

</comment></comment><comment><USER54> It's good to eventually have a comprehensive plan, but the other part which is especially important to be able to motivate your learning is to have fun. The trick to that is to make things easy but not too easy as to be uninteresting.

When you are just beginning to learn programming, really simple tutorials are going to be hard enough. When I was like 8 we had a Tandy Color Computer 2 that came with an amazing friendly manual explaining in detail each key to press and walking you through entering simple BASIC programs. Then it suggested making little tweaks here and there to change the way it worked.

If you wanted, you could actually download the Getting Started With Extended Color BASIC book from Internet Archive and actually follow it by emulating a coco2 on MAME. [https://www.google.com/url?sa=t&source=web&rct=j&url=http://...](https://www.google.com/url?sa=t&source=web&rct=j&url=http://www.colorcomputerarchive.com/coco/Documents/Manuals/Hardware/Getting%2520Started%2520With%2520Extended%2520Color%2520Basic%2520\(Tandy\).pdf&ved=2ahUKEwi3_7n59pHYAhUY9WMKHUgeAvMQFjAAegQIBxAB&usg=AOvVaw1eeoIcqr- UD4HUMfGUwKSw) It really is a great book.

Anything easy like that I think is a good choice to start. There are plenty of more modern alternatives. The point is though that you have to walk before you can run and you will need to build your skills up over a number of years.

Definitely a good idea to down the line refer to actual CS and software engineering curriculum and study books. But you really don't want to rely on individual prescriptions of what to learn or content sources. You need to learn actively in a self directed way. So google is an amazing resource.

But I would say 3-8 years, depending on what your standard is and the particular person, for normal non geniuses to have a solid set of knowledge and skills for software engineering if they work on it continuously. Which is not to say you couldn't be useful in a job before then though necessarily.

The most important skills may come through practice and learning the hard way though. For example developing actual important requirements that make business sense and are feasible and selling them to the clients is critical and really tricky.

To me most software engineering falls into two broad categories: design and feedback loops. By feedback loop I mean a continuous process where there is an input and output mediated by some error detection and error correction. Feedback loops in SE have multiple layers and types. It starts with the loop between yourself and the stakeholders in the process of analyzing and negotiating the requirements. This process continues through the initial development and maintenance of the software.

Other examples of feedback loops: between you and the compiler doing static checking of your programs syntax, unit testing, integration testing, etc. Another one: improving your object- oriented/functional/reactive/modular/whatever design as it evolves through new features and testing etc. That is the design process itself is a feedback loop where you come up with an idea for a design, try it out, see where it went wrong or could be improved, and adjust it.

Feedback loops and design overlap and interact of course. You want your design to facilitate the smooth operation of your loops. For example, if you need certain types of unit or integration tests, you will need to organize your code with that in mind to some degree.

</comment><comment><USER55> I was mostly self-taught when I entered the industry. Years later, I now work for one of the bigger companies in Silicon Valley.

I want to preface this by saying that you do _not_ need to be a CS expert to get started in software engineering. Do not buy into the hype. Sure, you'll need to know a few basics, but there are plenty of successful engineers out there who majored in quantitative / logical fields, who definitely do not know the equivalent of a CS degree's curriculum, and they're doing just fine. Indeed, there are a few successful engineers who didn't even go to college.

So the deep CS background is optional, but the following is not: are you the kind of person who enjoys and is good at solving puzzles? Will you persist after hours of bashing your head against the wall? You _must_ have this character trait to succeed as a software engineer.

Assuming you have it, you should start with web development in Python / Django:

\- The ecosystem is mature and beginner-friendly, meaning you can dip your toes in the water by using well-built, well-documented libraries that the community has put together over thousands of man-hours.

\- The results of your programming will be concrete -- you can interact with the product, and find bugs, as a layperson.

\- You can program something basic without any CS training. The libraries you will use to build your web apps will be leveraging plenty of CS concepts, but these concepts will be hidden away from you.

To learn Python syntax, there are a lot of different ways a beginner can go. I would recommend Code Combat for a complete newbie: [https://codecombat.com/](https://codecombat.com/).

Once you have the basics of Python down, look for tutorials on the internet for building web apps in Django. Build simple web apps until you:

\- Know how to think in Python.

\- Understand the basics of relational databases and SQL.

\- Understand the basics of HTTP / HTML / CSS.

Then, read a book on code craftsmanship, like "Clean Code," and reflect on how ugly the code is in your first few web apps. In the professional world, you'll be expected to adhere to standards of cleanliness and code organization, so refactor at least one of your web apps using the principles that you've learned from the book.

Only after you've determined that you can handle the above, you can start exploring the basics of CS. Harvard's CS50 is a lovely course, but there are more practical courses, for your purposes, on Coursera - namely Algorithms courses. I would recommend Princeton's Algorithms courses by Wayne and Sedgewick. Their courses are a bit less theoretical than the equivalent Coursera courses from Stanford, which is a good thing for someone in your position. I remember Sedgewick's instruction being very clear, yet rigorous. I believe the course requires you to learn basic Java, but given the programming experience you've built up to this point, you should be ready to dip your toes into compiled languages.

\---

This entire process can take as little as a few months depending on how sharp and motivated you are, and it's only a first step. At this point, you can continue your CS education if you're really interested in the field. But if you're looking to land a job ASAP, you're better off building up your portfolio, and making sure you really understand the basics of data structures and algorithms.

Furthermore, you should network at coding meetups. Look for a potential manager who is willing to work with a relative newbie such as yourself. I was lucky enough to find one early in my career, and it helped me immensely.

</comment><comment><USER56> First essential step: learn how to Google. This has been posted here countless times: [https://www.google.com/search?q=site%3Anews.ycombinator.com+...](https://www.google.com/search?q=site%3Anews.ycombinator.com+"can+I+become+a")

<comment><USER57> This post is needlessly demeaning. There's nothing wrong with posting this. Especially if you are looking for both directions and encouragement.

Your link will give the direction but not the encouragement.

<comment><USER56> I do think it's wrong to post the same question dozens of times and expect a different result. I also believe that googling is an essential skill to be a decent SWE.</comment></comment></comment>


The magic of Japanese space-saving products - <AUTHOR> http://www.boingboing.net/2009/10/15/the-art-of-japanese.html <comment><USER2> Is it just me or are those some pretty unimpressive products in that blog post? If you really want to see some great space saving designs look to the interiors of boats and RVs.</comment>


Show HN: Dicely, a webapp to make decisions on where to eat - <AUTHOR> http://www.dicely.com

<comment><AUTHOR> Looking for what people think and any helpful feedback. Just made by a bunch of us who got tired of asking the question and only getting lists of choices thrown back at us instead of decisions. Thanks!

<comment><USER2> Attractive look. First problem: I typed my ZIP (10002) and pressed enter, not expecting a location autocomplete, and received the "location cannot be found error." Consider either doing the lookup on enter press or refusing to submit before a lookup is complete.

Edit: options need a price level search, a la Yelp/Menupages.

Edit 2: the "dice" need a visual indicator (slide in arrow or such) that they can be used again for another suggestion.

<comment><AUTHOR> Thanks digisth. Which browser are you on? Usually most modern browsers utilize the html5 geolocation API. The zip code entry shows after a location cannot be found (which means automagically using the browser, probably should make that clearer) so you should have been able to submit the zip code just fine. Curious what browser you're using though.

As for price search, although we can do it, sadly not many of our APIs (aggregation of Yelp, Foursquare, Factual, Google, and Citygrid) expose price information when searching around a lat/lon point (they're available on expensive detail calls which we can't do). We could expose it but it would cut the population down to a few dozen from near 100 or so restaurants, which may not be a bad idea.

Thanks again!

Edit: the roll button (middle of page) can be used to advance or the Dicely logo. But yes, a clear tooltip can and will be thrown on there. Thanks for the tip.

<comment><USER2> Tried it with Firefox 15 and Chrome 22 on Win64 Vista.

It's a race condition. First, deny location tracking then type a ZIP code very quickly and hit enter. You get "Invalid manual location entered, please input your current location above to find yourself some food." If you type it in and wait, it works fine.

if (!isEmpty(cur_locality)) is returning false after enter press sometimes. Enter is not triggering the autocomplete functionality every time.

<comment><AUTHOR> Ah! I see it now. Will take care of this and push it soon. Thanks digisth. I am trying to figure out how to give you an upvote. I clicked the triangle but it doesn't show you having a point. HN newb here so would love to be enlightened.</comment></comment></comment></comment></comment>


Possible Facebook exploit via tinder app?  - <AUTHOR>

Has anyone heard of anything like this?
This morning I received a message from a tinder match immediately upon getting the notification. The first couple of times I responded, I got instantaneous bot-like responses unrelated to what I had just typed (and unreasonably sexually-explicit to boot). After another response, tinder reloaded the facebook login page and gave me a message saying facebook had already been authorized.
Wasn't sure what to make of this, so immediately changed facebook password and blocked this bot/weirdo just to be safe.
Never posted to HN before, but curious if anyone had heard of exploits through the tinder app... <comment><USER2> > immediately changed facebook password and blocked this bot/weirdo just to be > safe

Did you also check your Facebook settings for any extra authorized apps/devices?

<comment><AUTHOR> Thanks for the tip, looks like nothing new has been added.</comment></comment>


Test-driving Apple Pages with ePub export - <AUTHOR> http://blog.threepress.org/2010/08/26/test-driving-apple-pages-with-epub-export/

<comment><USER2> I've been reading that blog for a little while now and strongly recommend it to anyone who cares about e-book formats and how Apple's iBooks renders stuff. Liza goes into crazy detail about which tricks and workarounds work with iBooks, right down to putting in videos and custom fonts.</comment>


Investigate Dodd and the MPAA for bribery after public threats to congress - <AUTHOR> http://wh.gov/KiE

<comment><USER2> While this is funny, bribery has a very specific meaning, and every politician learned it very well during the whole Jack Abramhoff scandal.

What the MPAA, and Chris Dodd, are suggesting here is that they're less willing to make campaign contributions (on the up-and-up, as dubious as the up-and-up has become post-Citizen's United).

I'm quickly tiring of the hyperbole from both sides of the issue. As the days go on, this is clearly becoming less a matter of facts at hand and more a boiling over of old media vs. new media attitudes that have been simmering for 15 years.

I know what this conflict is like first hand. I work on the tech/web side of an old media company. Everything becomes us vs. them, and everything appears on the surface to have ulterior motive, when in fact it almost always first stems from a serious lack of understanding, which breeds frustration, which breeds paranoia, which breeds stupid bills like SOPA, with actual ulterior motives and all.

Honestly, I'm interested what types of companies PG and YC think will "kill Hollywood." My feeling is that killing it will necessitate a much, much more understanding and symbiotic approach to Hollywood than many on HN are willing to acknowledge.

<comment><USER3> I think the argument here is that Chris Dodd is wilfully admitting there isn't a boundary between "bribery" and "campaign donation" in his, or his corporations, mind.

His tone is that his campaign donations should have got him above and beyond treatment from those who didn't. A campaign donation lends no credence of reciprocal action from a candidate. The whole point of backing a candidate is that you believe that candidate supports ideals that are beneficial to you and the public, however Dodd appears to believe that the point of backing a candidate is to pay the most malleable candidate into office.

In Dodd's mindset he committed bribery with his campaign donations. Bribery: "the offering, giving, receiving, or soliciting of any item of value to _influence the actions of an official_ or other person in charge of a public or legal duty." [emphasis mine]

Dodd believes his donation should influence the actions of his chosen official, thus via the very specific meaning of bribery, he committed it and publicly admitted it.

<comment><USER2> Right, but that's politics since before Ike's farewell speech and the whole reasoning behind the Federal Elections Committee. Things are not so black and white. A donation can be as much freedom of speech as can be bribery. What the FEC and related Acts that define it do is to draw (I hope) clear lines in the sand differentiating the two.

I'm well aware that people don't like it and I'm not sure why people are suddenly surprised by Dodd's attitude toward campaign donations. Politics are all about influence. Simply because he wished his donations affected politics in his way doesn't make it bribery in the legal sense of the term.

If anything is surprising to me, because I'm inherently cynical about the political process (some of my best friends work as Senate aides and analysts and have no shame telling me how truly depraved the creation of a bill can be; to them, PIPA was a third-tier issue destined to be lost in bureaucracy should it have passed) it's that SOPA/PIPA have been effectively killed precisely because many politicians aren't necessarily beholden to their donators, that influence from an outside party made a huge difference.

So really, this shouldn't be a question about this one thing that Dodd or any other lobbyist thinks about their money's influence (or lack thereof) on the political process. We should be questioning the nature of money in politics in general. Ike was right, and things have only gotten much, much more incestual since his farewell address. But, as the saying goes, we get the rulers we deserve, especially when big tech, despite their size and money advantage over Hollywood, seems uninterested in playing the same games that Hollywood plays on Capitol Hill.

</comment></comment></comment><comment><USER4> Does anyone else have a lot of trouble getting logged in? I don't just mean that the form doesn't provide any feedback, but that even after logging in (I just reset my password and successfully logged in), when I go back to a petition page I get logged out again (yes I'm refreshing the page).

I'd much rather see a petition for a better website. :/

<comment><USER5> I had the same issue and resolved it in the same way. It would allow me to log in, but would not recognize that I was logged in (I was unable to sign the petition and had a button requesting that I log in, even though I was)

</comment></comment><comment><USER6> Yes there is a huge problem with American politics, but I don't know that only going after people who PUBLICLY admit this is the right direction. It might be a good start, but I really feel that you'd need more overarching change to actually make a difference.

</comment><comment><USER7> It's either "I have a dream" or "you're dreaming, man".

Not sure which. I am not american, but I wish I could sign this petition and give it the slightest incremental bigger chance of actually resulting in ... something. If that's even possible.

</comment><comment><USER8> It seems like this is getting heavy flagging. I think the rule is if it reach 10 flags before 10 comments the post is killed. So, don't just upvote, comment.

</comment><comment><USER9> What's hilarious is that Dodd was painted as one of the "good guys" during the 2008 presidential campaign. Oh what a difference a few years makes.

<comment><USER10> Not how I remember it ... Dodd was intimately involved with the government's actions that contributed to the Housing Crisis and was the top recipient of campaign contributions from Freddie & Fannie.

All of which had the makings for a very difficult election battle in 2010, when Dodd recognized as he opted out of running for re-election in 2010.

</comment></comment><comment><USER11> I love this. Perfect.</comment>


6 Line EventMachine Bugfix = 2x faster GC, 13x requests/sec - <AUTHOR> http://timetobleed.com/6-line-eventmachine-bugfix-2x-faster-gc-1300-requestssec/ <comment><USER2> And this, kids and kid-ettes, is why having someone who knows their way around your C compiler, assembler, and debugger on your team can be worthwhile, even if you're working in a high-level language like Ruby.

<comment><USER3> Even if you're working in a high-level language like a C extension to Ruby?

<comment><USER4> They had to patch the C extension to make their Ruby code go faster. They weren't hacking the C extension to begin with.

<comment><USER5> It certainly looks like a C++ module is part of their project: <http://github.com/eventmachine/eventmachine/tree/master>

</comment></comment></comment></comment><comment><USER6> This is why I hate garbage collection -- it tends to break horribly as soon as someone does anything unexpected. Using 800 kB of stack is an incredibly dumb thing to do (not as bad on a 64-bit system as it is on a 32-bit system, admittedly), but it still shouldn't cause a huge drop in performance.

<comment><USER7> "It tends to break horribly as soon as someone does anything unexpected" is usually the argument used against _manual_ memory management.

<comment><USER6> No. Using malloc/free will break if your code is broken -- but you look at your code and prove that you're not using memory after it has been freed, not accessing memory locations outside of the allocated regions, and not allocating unbounded amounts of memory, then you have a guarantee that memory management won't cause new problems for you.

With garbage collection it's possible to have perfectly correct code which nonetheless breaks horribly as a result of the garbage collector being "smart" in very stupid ways.

<comment><USER7> You make that proof sound easy. In reality, proving that code is correct is one of the most difficult things that a programmer can be tasked with. And, even if you _could_ program is correct, somebody could make a small change-- even a single character--and invalidate your whole proof. That is the primary reason garbage collection exists.

<comment><USER8> If we interpret what cperciva said to mean 100% correct proofs you're correct. But you can do a _lot_ of things in C++ to avoid memory leaks/reading from freed memory etc.

Some of them are:

1) are auto-freeing templatized heap object class (the compiler will automatically call destructor when objects goes out of scope, call free in the destructor).

2) Overload free/delete to fill up freed memory with 0xdeadbeef etc so that code that reads from there is likely to crash due to invalid data.

3) Use one of the non-libc memory managers which will track memory allocs and frees and tell at exit if all memory was freed. Some will even have tricks to tell you _which_ allocation was not freed.

4) If all else fails, use Valgrind for the really tough ones.

Coupled with a good regression/unit test suite, memory leak tracking will be an insignificant part of your development effort.

<comment><USER7> I am building a set of cross-platform mobile applications. In order to get the application working on as many devices as possible, I am writing the same programs multiple times: in C++ (Windows Mobile & Symbian flavor), in Java (ME, Android, and Blackberry flavors), in Objective-C (iPhone flavor), and in one case even Flash. These are all different implementations of the exact same program written by the same programmer who has more than 10 years of exposure to Java and C++.

Without a doubt, the #1 biggest waste of time in coding the application is the manual memory management required in C++. Symbian C++ is particularly horrible, but the memory management still sucks even when I get to write "standard" C++. And, it sucks right from the beginning (which kind of smart pointer do I need here?) through the middle (does this API call take over ownership of this pointer or not?) all the way through the end (am I _sure_ I got it all correct before I pay for this $200 signature?). I can take some shortcuts in the C++ versions because they have more memory to work with than the Java versions, but still the memory management is a much bigger hassle in the C++ versions than in the Java versions.

<comment><USER9> At the risk of hijacking the thread, since you are coding the same apps on multiple handheld platforms/languages, would you care to comment on which platform you enjoy developing in the most and why?

<comment><USER7> If it is possible to do it in Java ME, then Java ME is the best. It is so easy to code for, it is the most widely deployed by far, and it is easy to port to Android and Blackberry. Unfortunately, there are a lot of cases where the user experience with Java ME is sub-optimal to native apps or some capability is exposed only via the native API.

Windows Mobile is probably the worst because it has a pretty low market share, it is expensive to get started, and it is pretty tedious to code for.

Symbian is the most tedious to code for but it has a huge market share.

The iPhone SDK is the only way to make iPhone apps, and the iPhone is obviously very important so you can't ignore it. It was the most expensive to get started for because it more-or-less requires the purchase of a Mac.

Android is easy to code for right now but I've heard that the Cupcake update is causing a lot of people pain. When more devices from more manufacturers are released on more carriers, we may find that Android is not much better than Java ME in terms of ease-of-coding.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> The real question is, why does Ruby still use a mark-and-sweep GC?

<comment><USER11> That is not the issue at hand. The issue is conservative scanning of the stack.

</comment></comment><comment><USER12> The local fix is nice, but I would be tempted to offer a solution for all code that does the same thing -- put a big chunk of GC-opaque data on the stack. It might take the form of informing the garbage collector: skip this range.

</comment><comment><USER13> Well, one of my friends drop me one formula. Let x to be the rate of GC time out of total running time, and we can get

(1-2x) * 14 = 1- x => x = 13/27

which means now ruby spends 13/27 time on GC, fast enough? (before patch, it spends 26/27 time on GC, really bad)

<comment><USER14> I don't see how you're getting this formula, but if it spends 13/27 on GC after a 2x GC speedup, then it was 26/40 before, not 26/27.

</comment></comment><comment><USER15> This was a very interesting discussion.</comment>


Best of Open Source Software Awards - 2011 - <AUTHOR> http://www.javaworld.com/javaworld/jw-09-2011/110912-modernizing-it.html

<comment><AUTHOR> Interesting to find Opa (<http://opalang.org>), a web dev language in this article.

Any HN user tried this? Would love to know your comments.</comment>


Today, Europe Lost The Internet. Now, We Fight Back - <AUTHOR> https://www.eff.org/deeplinks/2018/09/today-europe-lost-internet-now-we-fight-back <comment><USER2> Here's a quote from this excellent article:

> _An error rate of even one percent will still mean tens of millions of acts > of arbitrary censorship, every day._

And a redundant -- positively defiant -- link _and_ page title:

"Today, Europe Lost The Internet. Now, We Fight Back." [https://www.eff.org/deeplinks/2018/09/today-europe-lost- inte...](https://www.eff.org/deeplinks/2018/09/today-europe-lost-internet-now- we-fight-back)

Firms with 50 or less employees should stay that small, really.

VPN providers in North and South America FTW.

<comment><USER3> This is not entirely accurate. One thing that doesn't seem to get much publicity, is that this law also fixes the broken DMCA process.

Platforms are expected not only to avoid taking down the wrong content, but they are obligated to have stuff (not computers) that rapidly examine any complaints about unlawful take-downs and re-instate the content.

[http://www.europarl.europa.eu/news/en/press- room/20180906IPR...](http://www.europarl.europa.eu/news/en/press- room/20180906IPR12103/parliament-adopts-its-position-on-digital-copyright- rules)

<comment><USER4> That link certainly seems to tell a completely different story. It's good that there are exceptions for small platforms, wikipedia and github.

That doesn't change the fact that the upload filter in particular is something that even Google can't seem to get right, so it's highly questionable what they really expect from this.

<comment><USER3> I guess what I hope about, is that right now the DMCA doesn't provide a good incentive to tackle wrong take-downs. Maybe by making this into a law, the process can get better. Companies will always do the absolute minimum required —and as a shareholder, this would be what I would demand as well. So it's up to us to set this minimum to an acceptable level.

Of course, I understand there are many ways this could go wrong. Law most of the time plays catch-up...

</comment></comment></comment></comment><comment><USER5> I was so excited over how the EU managed to get GDPR so _right_ , that I couldn't believe that the EU would get something else about the internet so _wrong_ immediately afterwards.

<comment><USER6> GDPR has been an UX disaster in practice. Now they're also going after content.

<comment><USER7> It's only a UX disaster because it makes it obvious what horrible things you now have to accept just to read some mildly interesting thing on some crappy site. That may be bad UX for the site but it's actually good UX for the user. Makes you consume less crap.

<comment><USER8> No it doesn't. It teaches you after about 20 times, that all sites are equally bad and now I can just safely ignore these popup notices.

It promotes apathy.

<comment><USER9> Speak for yourself, please. I like it and am happy not to waste my time any more on sites that traffic heavily in clickbait.

</comment></comment></comment></comment></comment><comment><USER10> This is an embarrassment and totally changes the colour of my view of brexit in one fell swoop.

I would not want to be a member state of an organization that thinks this is remotely ok either.

<comment><USER11> Lets build a gigantic bureaucracy and allow the most technologically illiterate people to decide weighty matters they haven't the foggiest clue about. What could go possibly go wrong?

<comment><USER12> May I use this everytime I describe the Politics+Tech situation in India!

</comment></comment></comment><comment><USER13> "It is insufficient to protect ourselves with laws; we need to protect ourselves with mathematics. Encryption is too important to be left solely to governments." \-- Bruce Schneier

</comment><comment><USER14> > _In the meantime, there are upcoming EU elections, in which EU politicians > will have to fight for their jobs. There aren 't many places where a > prospective Member of the European Parliament can win an election by > boasting about expansions of copyright, but there are lots of potential > electoral opponents who will be too happy to campaign on "Vote for me, my > opponent just broke the Internet."_

The problem is, in countries like France, EVERY elected official (and EVERY political candidate) is in favor of this, and the public doesn't seem to care at all...

<comment><USER15> These last few days I was very surprise to hear repeatedly on France Info (big national news radio) the side of the artists against Youtube and not once hear about the consequences for the Internet.

<comment><USER16> I am not surprised. I have been following copyright and "digital" law for about two decades. Most people just haven't changed their minds on copyright, wiretaps or many other things. If you want to convince people it has to be better than "it ruins the Internet". Because a lot of people don't even like the Internet that much. They already see it as run by large companies, trash social media and various malicious things that may affect their kids or get them scammed. A lot of people that are "pro" Internet just haven't given it much thought, they are mainly accepting their own chosen status quo. And that is getting worse every year. All these things we are talking about like remixing, encryption and social media have been studied and talked about in the past. Unfortunately few people care about a solution, they are happy if they read Reddit, watch some porn and "fight" by clicking some links every couple of years. I guess that sound cynical, but if one side is saying what is in-line with the rest of society and the other doesn't really have a story then it is going to be what it is.

</comment></comment></comment><comment><USER17> Europe, oh brother.

Hysterics are always directed towards America, but time and time again it is Europe that falls flat on its face.

<comment><USER18> You are getting downvoted, but it's true, as an European it's appalling to see Europe constantly sabotaging itself when it comes to tech.

<comment><USER19> Interesting: Is foreign judicial sabotage a thing in intelligence circles?

</comment></comment></comment><comment><USER20> Between GPDR and the copyright law it seems like the Internet is effectively read-only for European citizens and companies, at least below a certain size.

</comment><comment><USER21> It's curious how Internet regulations in EU end up with effects rather similar to those achieved bu regulations in Russia, or Turkey, or some other not- quite-free country — though the intentions are allegedly different.

<comment><USER22> Why is it curious? Russia modeled their censorship regime off of germany's censorship regime.

Reporters Without Borders had a nice write-up about it.

[https://rsf.org/en/news/russian-bill-copy-and-paste- germanys...](https://rsf.org/en/news/russian-bill-copy-and-paste-germanys- hate-speech-law)

For some odd reason, we think that europe ( which gave us nazism, fascism and communism ) is some bastion of freedom. It's not. It's never been. And it looks like it never will be.

It's not europe catching up to russia, china or turkey when it comes to censorship or surveillance. It's actually russia, china and turkey catching up to europe.

<comment><USER19> The second part is too harsh, unless you go back 80 years.

</comment></comment></comment><comment><USER23> Looks like Europeans can no longer hang over our American heads that our politicians are crazy. Turns out theirs are crazy too.

<comment><USER24> On average, ours have less nuclear options.

<comment><USER25> well USA has many nuclear weapons all over the Europe

</comment></comment></comment><comment><USER26> Is there a list with EU MPs and how they voted on this issue? I want to consider it when voting in the next EU Parliament election.

<comment><USER27> I believe you are looking for this: [http://www.europarl.europa.eu/sides/getDoc.do?pubRef=-%2f%2f...](http://www.europarl.europa.eu/sides/getDoc.do?pubRef=-%2f%2fEP%2f%2fNONSGML%2bPV%2b20180912%2bRES- RCV%2bDOC%2bPDF%2bV0%2f%2fEN&language=EN)

Additionaly there is also this picture from Julia Reda: [https://pbs.twimg.com/media/Dm5kGq5X0AANQZs.jpg](https://pbs.twimg.com/media/Dm5kGq5X0AANQZs.jpg)

Source: [https://twitter.com/Senficon/status/1039881088078958592](https://twitter.com/Senficon/status/1039881088078958592)

</comment></comment><comment><USER28> Tech giants must pay for work of artists and journalists which they use Small and micro platforms excluded from directive's scope Hyperlinks, "accompanied by "individual words" can be shared freely Journalists must get a share of any copyright-related remuneration obtained by their publishing house

Doesn't sound so bad...

[http://www.europarl.europa.eu/news/en/press- room/20180906IPR...](http://www.europarl.europa.eu/news/en/press- room/20180906IPR12103/parliament-adopts-its-position-on-digital-copyright- rules)

</comment><comment><USER29> I don't like this law, but I don't think that the ones who made it are as stupid as most people here think it is.

They are just ignorant of all the fallout and they care much more about, that this is directed against the "tech-giants", who happen to be mostly US companys. "We maybe cannot compete on internet technology, but we can regulate you". Plus, there is also allmost a economy war going on right now ...

And of course to set up censorship in general. To start to fight hate speech, fake news, terror propaganda ... and whatever else might be inconvinient.

<comment><USER19> > stupid as most people here think … They are just ignorant

two words, one similar meaning

<comment><USER29> Out of context.

Ignorant of some negative sides when you want something else is not necessarily stupid.

</comment></comment></comment><comment><USER30> So would these laws apply only to servers physically in Europe?

<comment><USER31> Or companies based in Europe... so move your server farm and HQ to the US, stick up a handy "451 Unavailable for Legal Reasons" linking to a "find your MSP and email them about this" page... and you're done.

<comment><USER30> Or maybe move the servers to Switzerland :)

</comment></comment></comment><comment><USER32> Please weight your words. Europe didn't lose its Internet today.

As to the content of this article:

> Article 13: the Copyright Filters. All but the smallest platforms will have > to defensively adopt copyright filters that examine everything you post and > censor anything judged to be a copyright infringement.

It's worth to mention what is _smallest_.

Annex to Commission Recommendation 2003/361/EC Article 2.2 states:

 _Within the SME category, a small enterprise is defined as an enterprise which employs fewer than 50 persons and whose annual turnover and /or annual balance sheet total does not exceed EUR 10 million._ [4]

They will not _censor_ anything that is not copyrighted material and you have right to dispute that censoring (it's also in article 13) in case you have copyright to material posted/it's not copyrighted material. In which case they can't stop you posting that based on this law.

Any action taken by platforms to check that uploads do not breach copyright rules must be designed in such a way as to avoid catching non-infringing works. As stated in

Article 13.2a: _Member States shall provide that where right holders do not wish to conclude licensing agreements, online content sharing service providers and right holders shall cooperate in good faith in order to ensure that unauthorised protected works or other subject matter are not available on their services. Cooperation between online content service providers and right holders shall not lead to preventing the availability of non-infringing works or other protected subject matter, including those covered by an exception or limitation to copyright._ [1]

These platforms will moreover be required to establish rapid redress systems (operated by the platform's staff, not algorithms) through which complaints can be lodged when an upload is wrongly taken down.

As stated in article 13.2b: _Members States shall ensure that online content sharing service providers referred to in paragraph 1 put in place effective and expeditious complaints and redress mechanisms that are available to users in case the cooperation referred to in paragraph 2a leads to unjustified removals of their content. Any complaint filed under such mechanisms shall be processed without undue delay and be subject to human review. Right holders shall reasonably justify their decisions to avoid arbitrary dismissal of complaints. Moreover, in accordance with Directive 95 /46/EC, Directive 2002/58/EC and the General Data Protection Regulation, the cooperation shall not lead to any identification of individual users nor the processing of their personal data. Member States shall also ensure that users have access to an independent body for the resolution of disputes as well as to a court or another relevant judicial authority to assert the use of an exception or limitation to copyright rules_ [1]

> Article 11: Linking to the news using more than one word from the article is > prohibited unless you're using a service that bought a license from the news > site you want to link to.

This is wrong unless you make money of what you do, which point 1a clearly states:

Article 11.1a: _The rights referred to in paragraph 1 shall not prevent legitimate private and non-commercial use of press publications by individual users._ [1]

Additionally if you make money of it you can link to the article and include individual words:

Article 11.2a: _The rights referred to in paragraph 1 shall not extend to mere hyperlinks which are accompanied by individual words._ [1]

> Article 12a: No posting your own photos or videos of sports matches. Only > the "organisers" of sports matches will have the right to publicly post any > kind of record of the match. No posting your selfies, or short videos of > exciting plays. You are the audience, your job is to sit where you're told, > passively watch the game and go home.

You know that exactly the same law applies to artists on concerts? You can legally record that and make selfies for your personal use but you can't share recordings publicly without consent? Most artists/copyright holders ignore that, this is why you see recordings on social media, youtube etc. But if they wanted to they could sue you.

But sports at the moment is different. Some EU countries introduce protection of sports events on national level but not all.

Look at ECJ (European Court of Justice) decision in _Premier League v QC Leisure_ [2] in which court stated that sports events as such (notably football games) do not qualify as protected subject matter under EU copyright law. The Court explained that in order to be classified as a "work of authorship" the subject-matter concerned would have to be original in the sense of the author's own intellectual creation. However, sporting events cannot be regarded as intellectual creations within the meaning of the EU Information Society Directive. This applies in particular to football matches, which are subject to rules of the game which leave no room for creative expressive freedom. The Court went even further and stated that sports events are not protected by European Union law on any other basis in the field of intellectual property, excluding therefore neighbouring or related rights to copyright (including database suigeneris rights) as well. [3]

Terms and conditions of access attached to sport event tickets have nowadays developed into quite lengthy lists of contractual obligations, which can vary depending on the type of event and on its commercial relevance. By way of illustration, together with the prohibition to carry into the stadium items considered dangerous or otherwise inappropriate, the use of recording and broadcasting equipment, the unauthorized transmission and/or recording through mobile phones or other recording devices, and sometimes even flash photography are explicitly forbidden. These rules are purely contractual. Therefore, in the case in which a spectator has, without authorization, succeeded in recording the match on a personal device such as a smartphone and has uploaded the video on an online platform, a third party acting in good faith (such as the online platform) will not be bound by that contractual agreement. It follows that the platform operator, as well as any other third party, cannot be forced merely on this contractual basis to take down the content from the platform. Whereas it has been argued that amateur recordings do not really pose serious commercial threats to sports organisers (and in any case they still represent a breach of contract), the gap in the "house right" based legal protection of sports organisers is in the absence of third-party effects. [3]

This is the reason why article 12.a was introduced, not someone personal selfies. Context is really important when commenting on law.

[1] [http://www.europarl.europa.eu/sides/getDoc.do?pubRef=-//EP//...](http://www.europarl.europa.eu/sides/getDoc.do?pubRef=-//EP//NONSGML+TA+P8-TA-2018-0337+0+DOC+PDF+V0//EN)

[2] 403/08 and 429/08 Football Association Premier League Ltd and others v QC Leisure and others and Karen Murphy v Media Protection Services Ltd (2011) ECR-I-9083.

[3] Margoni, T. (2016) The protection of sports events in the EU: Property,intellectual property, unfair competition and special forms of protection.

[4] [https://eur- lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:...](https://eur- lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2003:124:0036:0041:EN:PDF)

</comment><comment><USER33> >Linking to the news using more than one word from the article is prohibited

What if someone write app that rewrite article using most common synonyms not present in the article?

</comment><comment><USER34> Gotta say, I wonder what the Brexit reaction to this will be?

<comment><USER35> To make a UK version of the law.

<comment><USER36> Rubbish. Both major parties would be sensitive to the backlash, as neither is in a particularly strong position. 'U-turn' is an integral part of the UK political lexicon.

That's the benefit of a working democracy where decisions are taken within the reach of the people.

When legislation like this is steamrollered through the EU, it's obvious that resistance is futile.

</comment></comment></comment><comment><USER37> It is far from 'clear' or 'obvious' that the Directive is a bad deal for content producers. Read it yourself - especially Articles 11 and 13.

The narrative funded through GOOGL (and its affiliate EFF) and other big platforms is that this is evil doing of big content distribution monopolies.

What is missing in this picture is that this Directive gives affordable enforcement muscle to _all_ content producers, including the smallest ones.

This Directive is the death knell for these platforms, which peddle content produced by 'nobodies' (their users) without any remuneration. There is nothing natural, just or given about it.

<comment><USER38> What is missing in this picture is that this Directive gives affordable enforcement muscle to all copyright owners*, including the smallest ones.

<comment><USER39> It promises that muscle over the backs of people creating platforms, though. How is a small company going to ever create an upload filter that has little to none false positives and false negatives when even the FAANGs are not able to do this?

</comment></comment></comment><comment><USER40> It's awkward when government decisions are not subject to persuasive lobbying.

</comment><comment><USER41> Just to be clear, as bad as this is, passing the European Parliament stage does not make it law. Now the national governments get their say. Plenty to fight for yet.</comment>


The iphone was an MVP - <AUTHOR> http://seriouslackofdirection.blogspot.com/2012/02/iphone-was-mvp.html

<comment><USER2> Yep that's why they took so much time into getting a great web browser on the phone. It was expected that people would make web applications. It wasn't until the cries to develop for the phone itself were too much to ignore that the app store was born.</comment>


Why Lettuce Keeps Making Us Sick - <AUTHOR> http://modernfarmer.com/2013/07/why-lettuce-keeps-making-us-sick/

<comment><USER2> Hmm... I think that eating lettuce, and vegetables in general, is healthy. The title is just sensationalist, and the article scares people with the possibility that bacteria lives on the plants. If we would take the article seriously, living in cities or using our keyboard also make us sick: the air in cities is full of dog poo dust and the associated bacteria, and keyboards are also full of bacteria: [http://www.medicalnewstoday.com/articles/233104.php](http://www.medicalnewstoday.com/articles/233104.php) , [http://news.bbc.co.uk/2/hi/7377002.stm](http://news.bbc.co.uk/2/hi/7377002.stm) .</comment>