The year number of the ISO week very often differs from the Gregorian year number for dates close to 1 January. For example, 29 December 2014 is ISO 2015-W1-1, i.e., it is in year 2015 instead of 2014.
Specifically, you should be using +%Y instead of +%G when passed into date, and 'yyyy' instead of 'YYYY' when used in Java.
Unix date command: Use +%Y instead of +%G Java: Use yyyy instead of YYYY Python: Use %Y (ISO-8601 year number is not available) PHP: Use Y instead of o
(edit: This post had originally suggested the post's title be changed to mention Java, thus vitno's reply below)
php > echo date('Y'); 2014 php > echo date('o'); 2015
%G is replaced by a year as a decimal number with century. This year is the one that contains the greater part of the week ( Monday as the first day of the week).
* Y year of era (>=0) year 1996 * x weekyear year 1996 * y year year 1996
date Mon Dec 29 00:44:45 EST 2014 date -u "+%G" 2015
(install MAMP or WAMP for him to get him started, then get him a domain name and hosting for his own simple website)
I recommend Head First HTML and CSS to get started. The other books in the series are good as well all the way up to Head First PHP and MySQL.
TeamTreehouse.com is a good place to start as well or pick up with once you make it through a few of these books.
Once he gets through those I would point him to learning Rails and/or Laravel frameworks creating a few web applications.
Apps are fun too if he has an iPad and/or iPhone go through the iOS App tutorials on TeamTreehouse.
Good luck in 2015.
The TI has always included a programming language and interpreter in their calculators. It used to be "TI Basic" but now it is full Lua. They have hundreds of example programs to look and and learn from and tutorials galore.
The thing that finally made it click for him was, he could take this little handheld machine anywhere and whenever a programming thought struck him he could try it. Soon he was building reusable functions and libraries of reusable functions and everything clicked.
Now he's transferring a lot of that knowledge to other languages, most recently Python, without any trouble at all. I would recommend it to anyone with a kid who is interested in learning.
Chances are that moment he makes a shape move on his computer, he'll be hooked. At least that's what happened to me.
If there's a CodeDay (https://codeday.org/) near you, bring him to it. It's a nonprofit 24 hour hackathon for high schoolers. He'll meet a bunch of other people his age who are also into programming and will build and present a project by the end of the weekend. In the past we've had participants build everything from a breakout clone to a bootable OS in pure x86 assembly, so there'll be a wide range of skill levels and he'll see his peers building incredible things. Disclaimer: I'm one of the organizers of CodeDay LA.
There's also a Facebook group filled with other high schoolers who are into programming (https://www.facebook.com/groups/PennAppsHS/). If he has a Facebook, send me a link to his profile to my email (in my profile), and I'll add him to the group.
I'm also high school-aged and, if appropriate, would be more than happy to talk with him. Feel free to reach out to me through my email (again, in my profile).
Also see http://www.paulgraham.com/pfaq.html.
Also a Virtual Machine, such as VirtualBox would help him learn how other operating systems work without breaking his own computer.
I'd suggest thinking about the types of problems that you can solve. The closer to profit streams the better. Is there a common thread that you like to address? The narrower your focus, the more you can charge and the easier it will be to figure out how to market yourself.
Maybe your tagline is "I rescue software development projects that are failing." Maybe you could be even more specific "I rescue software projects that involve financials and are failing due to uncertain requirements."
Focus on what pain you solve first, then look to see who has that pain.
Freelancer = I can be hired to do one of X, Y, or Z at a rate of $A per hour.
Consultant = I can be hired to solve business problems within areas of X, at a weekly or monthly rate that's based on the worth of solving that problem.
Dropping the "freelance" tag was a good decision.
For finding out who are the clients, starting out with the industry you're familiar with is a good decision. If you "speak startup" and are familiar with the problems they have, then you're more likely to be able to be valuable to them.
But even within the startup ecosystem there are different types of clients. On one end there's the bootstrapped "company" that's not even a company yet and doesn't have a product, and on the other there's the startup with thousands of users and millions in funding. ... The value you can provide (and, by extension, the amount you can charge) is going to vary between the two.
Congrats on being a developer!
Joking aside, I'm in a similar situation as you but my experiences have been much different. Here's what I've experienced:
I moved from California to Calgary, Canada in April of this year. In California I called myself a consultant and everything was cool. Moving to Calgary, where Oil and Gas dominates the marketplace and so do the scummy Entperise Consultants it seems the title of consultant rubbed people the wrong way, given I'm trying to do work in Ruby.
I recently went back from referring to myself as a Consultant to Freelancer in my conversations and I've had much better conversations with people. I also can speak more confidently in myself calling myself a freelancer. Consultant has always felt really cheesy and if I don't feel comfortable saying it, then I won't sell it very well.
Long story shory: Go with what you truly believe in and your ideal clients are receptive to. In my experience, small to medium sized clients are far more receptive to "Freelancer" than "Consultant." YMMV.
Typically, your customer would be a senior executive type, an individual who, you have the expertise to help. Given your start-up background, it could be a founder, managing partner, or investor. Ultimately, the economic buyer is someone able to pay your fee.
Recommend reading Alan Weiss on the subject > http://www.goodreads.com/book/show/142757.How_to_Acquire_Cli...
Being first engineer is going to pretty much sucks. You don't get founder equity, but you'll deal with most of the same problems. Getting market rate cushions that quite a bit though. In todays environment there is very little risk for a developer doing a startup, if it goes down in flames another job can be picked up the next day.
https://www.wealthfront.com/tools/startup-salary-equity-comp... is a nice visualization for funded tech startup equity percentage.
Realize that equity is very much a lottery ticket, and with 1% best case scenerio is that you end up making baseball player money for a couple of years when you look back at option value and have some nice incentives to stay on if acquired.
Things to ask for:
Stock grant, not options. Being first engineer this should be doable and not cost you much in the way of taxes since the company should have almost no value from the IRS point of view. On the chance that you get a good outcome you cut your tax liability roughly in half (US).
Single trigger vesting. Usually more for people who will be fired during a sale like marketing, but I see no reason for technical people not to request it. After a change of control you'll be fully vested and free to move on and do something else or free to stay on for proper incentives.
Generally speaking, my opinion is that 1% equity is entirely worthless: not in the sense that to a first approximation all startup equity is worthless, but that it signals an unwillingness to share the value your employment adds to the company. A first employee, even a receptionist adds more than 2% to the value of the company, otherwise the person wouldn't be hired.
To me, 1% equity is a symptom of finite-pie thinking; a symptom of Owners who believe that employees are costing them money. Don't get me wrong, it's ok to work for someone who doesn't want to make you rich. Just be aware that they are actively going about not making you rich.
To put it another way, the difference between 1% and 7% is nickels not 100 dollar bills. If the company exits at $100 million or more the large shareholders get rich either way. But until the exit approaches $1 billion, 1% doesn't let you walk away with "Fuck You" money while 7% gets you close at the lower number.
Of course, 1% of $100 million is a nice payday. But 1% means that you don't really have a seat at the table, and deliberately so. You will always be the hired help and less equity means you are cheaper to replace and it is easier to reduce the value of your equity to zero if the company is successful.
- Valuing stock options? (http://www.payne.org/index.php/Startup_Equity_For_Employees)
- Negotiating compensation? (http://www.amazon.com/Negotiating-Your-Salary-Make-Minute/dp...)
- Establishing a benchmark? (check AngelList)
What are the stock options worth? If you have not tried to value them, then that's step 1. If you haven't done any research into how to think about valuing stock options, that's step 0.
This vague question is asked every few months on HN. Search hn.algolia.com to see answers provided by others. A few of them are worth reading.
Mine aren't the best, but might be worth skimming:
One big question is what your expected role is going to be in the future. 1% is far too low for a VP- or C-level prospect with experience managing a team. If the company is already well-funded (i.e. somewhat de-risked), 1% may be appropriate for a line engineer.
If you have others please submit a pull request. I've been writing about the issue since October http://rachelandrew.co.uk/archives/tag/vat
ONLY use that money as the last resource.
Continue building your product. Focus on sales. With sales you'll never need to touch that $10k. The $10k is end of the world money, for either yourself or your new business.
Do not create the sharespace office. At best it's a ridiculous distraction from focusing on your product. At worst it'll wipe you out.
Get yourself a phone.
2. Memorize as much as I can. It's an exercise; I memorize phone numbers, schedules, people's names, trivia, all kinds of stuff. I've never found anything that matches the flexibility and utility of my own brain. I should use the best tool I have, and that's in my head. Technology is unreliable and constantly changing and difficult to organize and search. I've been practicing this for long enough that now I'm pretty good at it.
3. For everything else, I use a few simple systems: a few sheets of paper to the right side of my desk for scribbling and note-taking (meant to be discarded after a day or two), a pile of to-do to my left, a tab open in my text editor labeled "notepad" for longer-term stuff, and a well-organized directory of documents on my laptop with subfolders like "projects", "writing", "sysadmin", etc. -- I try to keep this directory as small as possible by dedicating time here and there to either finishing or pruning projects.
I disagree that keeping knowledge in your head isn't efficient. I think a lot of people just don't practice it enough. Smartphones and computers and everything else make it really easy to not bother. But, my brain is always with me, doesn't require batteries (well...), can store any type of information I want, and can instantly recall it without having to craft some kind of search query or organize the information in a rigorous way. It is exactly the kind of database storage we all wish we had. It never changes data formats, it never tries to get acquired by a bigger company and then shut down, and it gets reception everywhere I go. If my brain were an electronic tool, I would want to use it all the time. And, the more I use it, the better it works.
(edit: oh yeah, and pinboard. Looove pinboard.)
- pinboard for managing bookmarks (database of things that may be useful sometime; probably never) & reading list for articles
- I'm testing tagspaces (http://www.tagspaces.org/) for local files organization (mostly tagging research papers and books; didn't like Mendeley)
- cardav & caldav from owncloud for contacts and events
- anki as a memorization tool (spaced repetition) - from languages to my own mistakes (i.e. "lessons learned", so I won't repeat them)
- for insights, notes, ideas, things I've learned & everything else I use personal wiki (media wiki) on localhost. This is the biggest part of my "system", I have there entries like things to buy someday, current project's notes/resources, useful scripts, configuration snippets, notes from books, journeys, analysis of my own behaviour, personal journal, ideas for startups etc. But it's hard to organize, it becomes a mess very easly after some time. Also, I can't use it on mobile (I don't want to put all this on the web, there is a lot of personal info), it takes time to add new thing/entry (I need to think to which page new piece of information belongs etc.).
- simplified version of gtd as a meta-system managing this system and for projects/things to do
It's a bit time-intensive to find things, but it's not impossible: let's just say the system is optimized for write efficiency and not read efficiency ;)
The problem comes from keeping everything organized (impossible with Evernote and Simplenote with their lack of structure, impossible with Quip since it's docs/spreadsheets-only) and in a way that works with my mind and workflow.
I'm working on sketching out what a unified personal knowledge management product might look like, which combines a kind of "inbox" of sorts of resources and notes coming in, and also a "personal wiki" with structured docs, and a number of people I know are also thinking about what a 'perfect' knowledge management system would look like. Let me know if you want to bounce around some ideas around.
2. Poor solution, but I email myself notes a lot. Usually from my phone, then I drop them into a folder in Outlook when I get back to my desk.
3. OneNote, for more long term collections. Microsoft did an amazing job with this product.
To organize the text files; over time I build an index of categories at the top in CAPS, and each category heading below is also in CAPS. Then when I save / retrieve / cull information I search the category "Case sensitive" to locate it quickly. Once major groupings can be identified and corralled, I separate those into independent text files. It's work.
For Chrome bookmarks I build similar categories but this can get unwieldy if not maintained and subdivided on the regular.
If it matters; all my local files reside in one of two folders (or downstream of them). One is for current "in flux" files & the rest goes in the other "archive" folder. I do encrypted backups on the "in flux" often and the "archive" far less often to external drive(s) & the cloud/online. I have a third "clients" folder but all the files there are temp and go back to their respective servers and I don't backup any of it.
I concur with sp3n concerning over-collecting, often I get back to something and it's already obsolete or maybe not at all.As a result I end up in a data cull session from time to time.
Don't like paper and would love to migrate all to 100 percent online one day.
SELECT All *.jpg as image FROM /myfolder/** where image.creationDate > yesterday and image.size < 100 and image.filename LIKE TRIP% ;
Something that would combine find,grep+pipes into something more "userfriendly".
Passwords are a good example of this. I can deduce them(based on a formula), but I don't want to do that every day, so I use 1Password.
But it's not bad to just forget. There are quotes, links, funny pics in my Evernote that I've never used. So I'm now much more selective in my note taking. It's less stressful.
I've recently started to use fedwiki instead of OneNote, and things are alrightish. Fedwiki has lots of room for improvement as a wiki, and then as a knowledge store.
I think the ideal personal information/knowledge store would incorporate a tagging filesystem combined with something like OneNote/fedwiki. The tagging filesystem would allow PDFs, movies, etc to show up in searches with fedwiki/OneNote handling the plain text & images. Ideally the client that the user uses is something like fedwiki, where you can have multiple different pages open at once, but also allow you to pull in the PDF/video resources.
1. A little bound paper notebook such as a Moleskine.
2. A mind mapping program -- I use FreePlane -- to store links, including links to files on my hard disk. An advantage is that I don't have to get the organization right on the first, second, or even third try.
3. A lot of the information in my life is not digitized, such as most of the sheet music in the world. So I now rely on my cell phone camera to record a lot of that stuff.
Amusingly, when I was in grad school, it was still considered to be an open question whether a person should get their own computer. The university computer store had a little guide, and the most memorable advice -- which certainly rings true in my life -- was: "Don't expect a computer to make you organized. If you have a messy desk, you will have a messy computer."
- For meetings, events, social obligations, I carry a small paper-based diary.
- For ideas and thoughts, I write them down. The idea is that the act of writing something down aids recall. For example, story and blog ideas go in a A5 notebook that I carry around with me, and I commit them to a digitally backed up document as soon as possible. Note-to-self lifestyle advice goes in my bedside drawer, to check on if I ever feel like I've forgotten anything.
- For things to learn and interesting articles, I don't do anything and keep my fingers crossed that the salient bits will have rubbed off on me, lurking in my subconscious and subtly improving my life forever after.
I'm not 100% sure that last one works quite that well.
Simple text file that's actually more functional then almost any other solution, designed around allowing you to create and adapt new workflows and WILL be available and useful to you for decades.
For example, I want to learn more and more about distributed systems, so when I see an interesting article, i tag it. When i have some time, i go through the relevant tags.
The most important purpose, I decided, was personal goals. Knowledge/information which is relevant to helping me achieve my own goals is the most important thing I should be focusing on, and should be extremely well organised and easily accessible. Any other interesting info that falls outside that is a bit of a shame to lose, but ultimately just a distraction and clutter. For this purpose, I developed this tool: https://nachapp.com
I believe the next level of information down would be general learning/knowledge. Stuff that doesn't fall under any specific goals, but is still useful information to know and understand (and may in disparate ways tie into core goals). For this, I'm currently using https://pinboard.in, although it's not ideal as it's again limited to a single medium. I have a solution in mind, but haven't started developing yet. If you're interested, feel free to get in touch and I can keep you updated (contact info in profile).
After trying several solutions, I ended up building a SaaS to manage everything. I found most things out there are fairly boring, and are not at all as powerful as what I wanted. It's basically a brain for my brain; so i can remain a scatterbrain and it can tell me when its time to water the plants, or if food in my fridge is about to expire. But it also handles all my notes, important files, time-series data, and historic dates.
But really, you have to figure out whats important to you and what system best aligns with that; and in the end you'll likely need to make a few tradeoffs to get something working.
But I think there are definitely some principles you can apply to any system you use; I can't recommend Getting Things Done by David Allen enough. His methodology is great, but even if you don't like it or can't use it for whatever reason, there are oodles of great tips; and it'll make you into a natural project manager / information guru.
In terms of research papers, you may want to look at the ideas of Doug Engelbart. The process which you speak of, of collecting information and learning from it, Engelbart termed the CODIAK process. There is a section describing what CODIAK is in this paper. (click on the CODIAK Process link in the table of contents). Engelbart speaks of this process in terms of groups and organizations, but the ideas apply to individuals as well. Engelbart's goal was to create an integrated "knowledge workshop", where all the different programs for organization everything would be integrated together and act as an extension of the human mind to augment people's abilities to collect and digest an ever increasing amount of information and knowledge. There is a lot of work left to be done in this area, but it is an important problem to solve.
I have recently started using jrnl: http://jrnl.sh
I really like it because you can export it any many formats which I think would come in handy later to import the data, say a database. I always like the idea of a flat file for right now so you can ack/grep on the command line.
The cons are not great for assets such as images.
Looking forward to reading some other solutions.
- one where I keep track of my work: it's half a todo list with bullet points, half notes about my progress for meetings- one where i write ideas, things I want to dig into later
I write in them from bottom to top (so that my last entry is always on top).I basically use them as paper notebooks.
Actually if it wasn't for URL copy pasting, I think i'd use paper and pen.
Things with well defined start/end dates or with very high priority/high cost of missing (ie flights, parties, reservations, deadlines): calendar (I use my iphone calendar with alarms if necessary)
Things with less well defined start/end dates: starred emails/browser bookmarks toolbar
Menial things that need to be in the near future (ie groceries, laundry, shopping): Leave something out of place as a reminder, or put in calendar with alarm if urgent
Things with low priority/low cost (ie things to read/learn/listen/watch, fitness goals/accomplishments, future trip plans, long term plans, misc notes): iphone notes
Also keep a notepad at everywhere I work regularly (home desk/office desk) and in my backpack with notes
I also feel its very important to maintain 0 unread emails in all of my inboxes. Makes it much more feasible to stay up to date on everything and avoid missing anything important. 90% of the time I'm awake, I will read any incoming mail within 15 minutes and respond immediately if necessary.
It's also responsible for my spaced repetition system, my work agenda, my personal agenda, blog post ideas, project ideas, grocery lists, todo lists, etc...
It's extremely powerful and my life is forever changed because of that software.
Keep your life to three to five major things and this works really well.
Also, Don't go more than two or three folders deep. If you do you're organizing wrong.
I also scan or photo all of the paperwork I get throughout life put it in Google drive and throw the original away.
Also, you can put all your photos up on google drive. (Just not very private photos..)
Note: security/privacy concerns if you do this with personal stuff like medical or financial docs.
There's ways to encrypt it all on google drive just don't really have enough important info there to care.
There is also camlistore (http://camlistore.org/) which is trying to be the recpipient for every content one wishes to store: images, music, PDF files, bookmarks, RSS feed items, ... It's working well in the "aggregating" phase, but still a little bit lacking in the "organizing" phase (which may very well be the work of third-party application). For the moment content is accessible through a simple search engine though.
One unique thing I started doing, I use this program called ClipX which lets you have a popup of your recent clipboard entries. Its will let you save to a text file. So, everything I clip, code snips, passwords, etc.. goes into a single text file - so I can just Ctrl-C something and forget about it. Six months later I just do a text search in this file. Its gets big (10MB or so) and I back that file up and start with a new file every year.
So I guess my answer is "poorly," but somehow it seems to work.
Most of it I'll never need again (and probably look online for it first anyway, if ever), so it's really just to satisfy a compulsive need to have the impression I'm not "losing" anything. Rarely did I ever dearly miss anyhing on accidental deletion of my "stores".
1. Dropbox for all the read-only ( Images, PDFs, Books, important papers).
2. I use IFTTT to autobackup a specific folder (very imp one) from Dropbox to Box.
3. Something I need to edit, like spreadship or docs. GoogleDrive works very well.
4. I keep most important files on atleast two services.
5. IFTTT works great to collect data automaticaly.
Edit: Goodlooking line breaks inserted.
The take-away there is index cards. I like the idea of information being broken down small enough to fit on an index card. Reading a book, it could be one point, one quote or something of similar size.
- Folders like \doc \tutorial \ideas \recipics - Store everything in .txt and .odt- Replicate to favorit cloud storage
- For comunication: Fastmail, Skype
- Contacts & calender: Fastmail
- Keep a diary in a mail folder, I send myself a mail every now and then with a subject to an alias, that gets sorted into a "diary" folder
Delicious ( I hardly check it)
Edit: I seriously keep everything in Evernote, whats up with the down votes?
OneNote - The greatest program ever made. OneNote isn't useful for short-term to-dos, but I couldn't live without its organization of my long-term work.
Pocket - I never have time to read articles, and they're unpleasant to read on a squat laptop screen in any case. Pocket lets me read them on my tablet, in the subway, with gorgeous formatting.
Google Calendar - The whole Google ecosystem is ridiculously useful for organization, including auto-additions to your calendar from Gmail and Google Now's intelligent suggestions.
Gmail - Particularly the five-tab filtering. Holy shit. I had no idea how disorganized my inbox was before I could filter away the dreck.
Google Keep - It's been displaced somewhat by Trello (in terms of grocery lists, etc.) but it's still great for medium-length notes that you'd like to read on the subway or something. I store a huge amount of poetry in mine.
Google+ - The BEST place for photos. I don't understand the fashionable hatred. G+ is by far the best photo backup/organizer/enhancer/sharer I've ever seen, and the G+ social network is WAY better than Facebook's clunky organization. I'm amazed that Facebook is so bad with photos... isn't that pretty essential for social networks? G+ is just too good to be ignored forever.
GDrive - Corollary to G+. Putting photos on GDrive automatically uploads them to G+, which again is just excellent. Google DEFINITELY needs to upgrade their 1TB limit to "unlimited," though... and offer auto-deduplication for identical photos for the billions of us with redundant photo hoards. Right now, GDrive prices are the highest on the market for limited storage and no extra features like deduplication or auto-organization. I still pay for GDrive just for G+ photo features, but Dropbox offers equal/better functionality and OneDrive offers much better value.
Kindle - You never realize what a burden paper books are until you have an alternative. Ebooks are incredible.
Calibre - Especially if you have a ton of academic papers or studies to pore through, organizing them in Calibre makes life infinitely simpler.
Spotify - Outsourcing my music collection to streaming services is GREAT. I'm now trying out Google Music, which lets me upload 20,000 MP3s to supplement the holes in Google's collection. (Perfect for unpublished songs and so on.)
Steam - The original Spotify for video games. All the same benefits, plus amazing sale prices that have forced me to buy way too large a collection.
edX - Coursera and Udacity also, but any of these are gold mines for organizing self-paced education.
Pidgin - Still the best instant messenger, though the shift toward closed networks is making it harder to use. That Google still allows Pidgin to access Hangouts via (limited) XMPP has kept me faithful. I don't understand why anyone would use something like WhatsApp and its crappy clients.
- - - - -
If anyone from Google is reading this, particularly from the Tasks team... just buy Trello already. GTasks is woefully inadequate, particularly when compared against Trello's unbelievably powerful kanban organization.
Also, I'm a little disturbed by how heavily I depend on Google. I don't see any viable competitors, though -- Outlook lacks Gmail's tabs and themes, OneDrive lacks GDrive's functionality, Facebook lacks G+'s insane photo features, WhatsApp lacks open APIs. I hope Microsoft steps up soon, because I don't see any other real competitors against Google dominance of web services.
For the larger codebases, generally you would want to get a vague idea of the architecture and then blind yourself to most of the complexity.Let's say that you wanted to work on a network based data serialization library and the issue marked out as 'contributor friendly' was adding unsigned integer support building off existing signed integer support.For that target, there's a large portion of the code that you shouldn't need to understand too deeply and there's a section that is going to be relevant to making the modification.Try to find the code that is relevant and trace the execution just by reading the code.
As long as you limit the scope of your work and the codebase is somewhat compartmentalized, you can shrink the time it takes to go through large projects by a fairly large amount.
You could use something like Firebase for your API if your needs are not too complex, and then re-visit the back-end architecture decision once you've somewhat validated your MVP. https://www.firebase.com/docs/web/libraries/angular/quicksta...
PHP would make sense only if you have someone on your team that is already quite familiar with it and knows a number of PHP developers that you can hire to build out a team later on.
But Python developers with web development experience can be harder to find, depending on where you are geographically located. PHP web developers are everywhere, but the quality of talent varies greatly.
Now, to answer your question: pick whatever you're most comfortable with. Software startups fail not because they are built with PHP instead of NodeJS, but for entirely other reasons.
Just curious, are you planning on using TrueVault?
Are you looking for a job listing, or for a job? Perhaps try to proactively contact companies you think could benefit from hiring you.
> It seems that everyone wants years of work experience, regardless of how good you are.
You can treat the years of work experience on a job listing however you want. You can think of it as an indication of the experience level they're seeking. If they ask for N years of experience in XYZ tech, and you are better at XYZ than most people who have N years of experience, then (i) apply, (ii) find a way to show how good you are.
For (ii), this should be easy if XYZ=Android, as the software you have worked on (for previous employers or on your own) is something they can run on their own phone. If it can run on a phone then it doesn't need some huge deployment effort or special build environment for them to try.
Find books that give clear 'type it yourself' examples that you can follow along with, or books that test your ability to think in the language by giving you problems that need idiomatic code to be solved (perhaps the best example of a book like this that I've seen is The Little Schemer).
If there are 'koans' or 'katas' or similar interactive exercises for the language, find them and do them. All of them. I learned so much about basic style of a language from these. Try sites like Project Euler and Codewars.
Find tutorials like 'how to build an X in Y' and follow the whole thing from start to finish. It doesn't even necessarily matter, IME, whether the code is particularly good or idiomatic: once you've made a project of any considerable size you'll start to see the strengths and weaknesses of the code and the advantages of the native idioms.
Finally, find yourself at least two non-trivial personal projects to write in your new language, and just write. Write big code, that needs proper maintenance and bug-checking and testing. Don't worry so much about idioms yourself though, just write: when you go back over your code again, you'll see where you've gone wrong, and do better next time. Your first big project in a new language will be terrible. But you'll know exactly why it's terrible by the time it's done, and you'll do better next time.
This is what's helped me, anyhow; obv. everyone is different, I am not an expert, etc. etc. The important take away is that ultimately: "idioms" are just ways that people have found work best in the language; the best way to drill on the style of the language is just to use the language a lot and read the language a lot. Idiomatic code comes from practice, more than anything.
That's not to say that it will redirect your career from C programming to J programming (my impression is that there are not a huge number of all day every day J programming jobs). But rather, J is one of those languages that requires people to change the way they think about programming languages. It's pretty amazing in my opinion, but I've been drinking the Kool-Aid ever since coming across the book.
I would really like to use an HN/Reddit like application restricted to different networks of people that I know to share news/content that they would enjoy or benefit from.But then I thought perhaps that's only because I don't use facebook much and my friends/colleagues don't use twitter much.
Most of my friends/colleagues have started sharing a lot of news content on their facebook recently. So I guess some people (at least here in Mumbai) are sharing what they see on HN/Reddit/other with others via Facebook.
As for me, I often share articles that I like with others via email or text depending on the person I'm sending it too. My dad uses email for doing this too (maybe because he doesn't use facebook at all).
I guess there may be a missing communication channel for people who don't use facebook much. Tweets seem to get lost in the crowd of thousands of other tweets people see on their twitter stream.
I would use an HN/Reddit restricted to networks of people I know. But they would have to be really active in order to make it as good.
I've read good things about AppHarbor, haven't tried it myself though.
They have a free tier but you have to use their domain.
I'd also look at Amazon AWS, but it can also get pricy :( .
I found this blog post, it has a few more options:
I've been running applications on Azure Web Sites and Cloud Services for several years now and have found it to be much more reliable and better performng than the cheap shared hosting option I'd been using previously.
Using a custom domain name requires that you bump up to the next level, but that is only about $10 a month.
Successfully freelancing --- and you have to do it somewhat successfully to get to the place where you can set up your schedule like you want --- requires a lot of the business and sales skills that getting a startup off the ground requires. Friends who have tried to start freelancing businesses have washed out after a couple years because they just can't deal with the grind of selling.
I too am very skeptical of startups. I'd rather get paid by the hour, then get paid with a promise that's not likely ever to be kept.
I understand one-half of American businesses - in general, not just startups - fail during the first five years.
Up until May 2014, I was working FT at a small non-profit (government-supported) consulting firm in the medical devices space. At this point I had about a decade of progressive development experience and more than half of that in the medical space.
I wasn't totally happy at that position for various reasons and, for some time, I had been interested in having more time to work on my own projects. Part-time work was what I thought I needed, but no employers were interested in that kind of arrangement.
Also significant is that in April 2014, our first child was born and I knew that I wanted to be an involved parent. So as my son's due date came closer, I investigated freelancing as an option.
Another factor that is important in my case is that due to my previous employment and my family's relatively frugal means of living, we are doing OK financially. We live in a medium-sized city in Canada where living costs are lower tha your bigger tech hubs. I knew that I could go a year or more with almost no income that we'd still be fine. I've come to realize that this is a blessing and a curse at the same time though ;)
To be honest, some things just fell into place for me. One of the clients that I was the lead on at my day job was someone I knew that I could talk to openly and when I told them that I would be leaving, they showed immediate interest in retaining my services.
My employer was fairly shocked at my leaving. I was (and I try to say this as modestly as possible) the most productive and reliable developer there and also the one trusted most with customer relationships. I gave them plenty of notice (6 weeks) and we left on very good terms.
Here's the kicker, my old employer is now my #1 client. I am essentially a subcontractor to them. I make about 1.75x what I did as a FT'er on an hourly basis doing my old job for them, but I have the ability to set my hours, workload, and decide which projects I take on. It's almost funny to me because if they had offered me reduced hours and similarly reduced pay in the past, I probably would have taken it. I charge them a bit less than other clients, because they take the pain of finding new customers out of the equation for me.
All this said, I bill about 50 hours a month. I could bill more (take on more work), but that isn't my objective. The other time I spend working on my startup and I spend an above average amount of time at home, being a dad. This is exactly the arrangement I was looking for and I couldn't be happier with life these days.
This won't last forever. That's why I've got the startup in the works and also I know that, should I ever need, I have a reasonable number of contacts in my city to get another job (and I'm sure my old job would still be available should I choose to return).
- Look for a new job that satisfies your desire.
- Work on open source projects in your free time.
- Start a new project which you feel could contribute to x.
For my personal experience there was something deeper for me, I wasn't happy with the 'do good' job I found and ended up going to just a better job even though it mean making some product for profit.
I did however become a certified personal trainer and train clients on the weekend. Which helps me fill that void of doing good with my life by helping myself and others live a healthy life and be fit.
Diversify your time. Don't put all your emotional/time investment into technical skills/work.
Organize something at work like a potluck or a karaoke night. You don't have to be the center of attention once the event gets going (but you'll have to get the event together). The host has the power..
Be part of something bigger than yourself, be an active part of a community (doesn't have to be tech). Belonging is a big part of happiness.
Volunteer. Someone once told me that to be a true volunteer with no selfish overtones you would need to a) volunteer for the blind and b) not tell anyone. You don't have to do that.
I personally have never looked to work to satisfy my passion (for computers). No matter the job I am working at, I have a steady stream of side projects and try my hardest to keep up with a small bit of the massive firehose of change that is modern computer science/programming.
Don't worry about being average. Many of the people who have created great things weren't that far from average. They just seem like geniuses in retrospect. Also, it's about 5 billion times (give or take) easier to do software these days, you have a huge leg up on geniuses of the past.
Find a project to do that makes you happy, and do it until it doesn't make you happy anymore (hopefully, after it's finished)
- Look for a new job that you haven't ever worked before. If you do CRUD applications, start doing mobile software or whatever else is new for you
- Stop spending your time with your colleagues and start looking for new friends, learn from them about the world, about problems, about realworld problems and try to solve them using your mind
- ...and yes, try to contribute to open source projects, stop procrastinating, go and fix the annoying bug in your beloved library or propose pull-request
- ...or make something just for fun
Try to get break. Stop and turn another way. Open your mind. Blah-blah do!
There's your first problem: looking for a meaningful existence in an activity that is also supposed to pay the mortgage. Good luck to you in making those two intersect. But look at what you're asking in another way: "I'd like to tie my identity to my vocation, but finding a vocation that allows that while supporting my 'software money' lifestyle is difficult. What to do?"
I've given up on doing that. I'm not saying everyone should, don't get me wrong. But finding a job that gives me purpose and meaning in life, and pays six figures is fighting strong opposing odds. That's fine, of the work I do I usually enjoy it even if I'm not finding the cure for cancer. If I had my way, I'd work full time at the NPO animal shelter I spend a lot of time at. But even the director (IOW, the big boss) only pulls down $65K a year. I'd settle for that, but I'm not getting her job anytime soon. The best I could probably do would be a little above minimum wage, and probably not 40 hours.
So what do I do? I work whatever software job keeps me interested and pays the bills. With the wheelbarrows of money that brings in, I donate to causes I feel should be supported. Sure, that might cut into my BMW M5 money but you don't get your cake and eat it, too. I mean, what nobility is there in a job that pays the salary that many of have become accustomed to, and still allows us to feel that there's "meaning" in our work? Where's the sacrifice? Quit trying to tie the two together and you'll get on much better, IMO. Sometimes the two coincide, most of the time they don't; don't force it.
I'm not just a checkbook volunteer, either. In the case of the animal shelter, I've logged over 200 volunteer hours this year. Though not a professional dog trainer (though at this point, going pro would merely involve a test and a few other hoops), I train dogs with behavior problems to make them more adoptable. Sometimes it's not that glamorous: taking a stream of dogs out for a walk and picking up their shit. One after another, repeat for two hours. Am I changing the world? Depends on who you ask. The dog who came in a mental basket case who I trained to be a civilized member of society, and later got adopted, might argue that I may not have changed the world but I changed his world.
Meaningful volunteer opportunities abound. Coach a kids team. Help your local church's homeless outreach. Whatever your "thing" is, there's an organization that can put you to work. Sports, animals, computers, whatever. Personally speaking, I go home every time feeling like the world is just an eensy, weensy bit better due to my actions, rather that hoping we find that big breakthrough at work in a few years so it'll all be worth it rather than just another day at the office.
> I probably just have it too good or I'm just meant to be miserable.
To use an over-used cliche: it's definitely a first-world problem. Most people in the world go to work so that they and their children don't starve and have to live on the streets. If we find meaning in it, we're fortunate. For a large part of history the vast majority stayed one step ahead of the wolf by working whenever the sun was up.
I'll close with this: if you think working on things that you classify as "amazing" or "great", all while pulling down 'software money', is noble then I think you're looking at it backwards and will never find satisfaction. Once you learn to see the greatness in picking up dog shit, for free, your answer will come to you much more quickly.
If their initial pitch goes well, and they ask about my comp requirements, I know that I'm supposed to have them make the first offer, but I will usually offer a salary and equity number. Granted, that's considered by many a negotiation mistake. So, I will say that I will not consider less than x$ and y-equity, but that it will likely take more. Depends on how the interview process goes and what I learn. But they're numbers that, if we end up there, will be better than my current situation.
So, then things go well, and they make an offer, usually at or very close to what I told them. I've always countered some bump in salary or equity from that, but a package that if they accept, I will accept.
For me personally, money is no longer the top factor, I don't particularly enjoy negotiation, and I'm usually also talking by this point with my potential new boss. So, I willingly make the process pretty streamlined at the expense of possibly squeezing out a little more. That approach is not right for everyone.
That said, I think companies fully expect some negotiation. So whatever negotiation tactic you take, as long as it's respectful, will not hurt your chances of ultimately getting the new gig. In other words, they won't withdraw an offer or anything if you negotiate.
Recruiter: What kind of number are you looking for?
Me: I'm looking for a minumum of $num. (A 25% raise from current gig)
Recruiter: We can totally do $num.
<a week or so passes while they put the offer together>
Recruiter: We're offering you $num.
Me: Could you do $num + ($num * 7%)?
Recruiter: I'll see what I can do.
<a week or so passes while he gets approval>
Recruiter: We're offering you $num + ($num * 7%).
Me: Sounds good.
Now, a professional negotiator probably wouldn't have coughed up a number first, but my gig at the time was paid fairly and I really liked the company. So I tossed out a number that was big enough to actually get me to jump ship. Was no skin off my back if they couldn't reach it. But they could. And I had a pretty good feeling from the hiring manager that they wanted me there, and that they'd advocate for me with HR, which I'm pretty sure is what happened.
6 months later, I had a new job offer. On the day I was going to resign, they gave me a raise (they probably knew a about my displeasure, but not the job offer). I thanked them, showed them the offer and told them I couldn't ignore the difference in comp. Then, I asked if they could do better. So, they gave me another raise. Then, I asked them if they could do better and...
You get the point. I am good at my job and before this point in my career, got recognized in every way possible, other than financially. However, for whatever reason, the only way I could get any financial validation was to have leverage, which in this case was another job. In the case where you are negotiating a new opportunity, your leverage is whether or not you'll take the job. In my case, my leverage was another great opportunity for a lot more money.
I suspect I'm not the only one on HN that focuses on doing a great job and not on directly advancing their career. So, my advice to you is always have leverage when negotiating and don't be afraid to use it. However, there are 2 caveats. 1. You have to be willing to take the other job - your company may not be interested in retaining you.2. Having a job offer is very different than just being disgruntled, from the company perspective. But, tread lightly, you want to come across as wanting to stay, but unable to ignore the financial or professional disparity
My last interview at amazon went like this:
Stupid trick coding question over the phone that I did not understand at all. Followed by 3 memorization questions. followed by one question I felt was valid and i know i got it right.
I was being interviewed for a specific product that was right up my ally. I could literally build what they had built easily, but they never once asked questions related to the product or my experience.
I looked at the product a year later and basically nothing has been done to it.
> I suffer from crippling anxiety [...] foggy Xanax brain.
Consider asking your doctor about propranolol.
It's a safe, non-addictive beta-blocker often used to treat high blood pressure, but it also eliminates the peripheral nervous system response to anxiety, the "fight-or-flight" adrenaline rush feeling: racing heart, shortness of breath, inability to concentrate, shaking, sweaty hands, blushing, etc.
It doesn't effect your mental anxiety, but it'll cut out all of the physical symptoms, which makes the mental anxiety much easier to control, without creating any sort of brain fog.
1 Iterative/agile software development. YAGNI. Build the bare minimum, then iterate when you learn more.
2. Hire slow, fire fast.
A really agile org would be hiring fast too. Now... I know a lot of this has to do with labor laws - hiring an actual employee brings extra baggage. And in the US at least, more people may want to be employees for reasons like health insurance.
Even with those considerations, companies should be bringing on more short term contractors, and the ones that work out stay longer. The ones that don't, for whatever reason, move on.
The same teams that will say "YAGNI, just build XYZ, ship it, etc" - iow, just get stuff out the door - will hem and haw and take forever looking for a perfect candidate that, in reality, doesn't even exist.
It's early in the morning, this sort of makes sense in my head, but I may not quite be making sense. But it's still a seeming conflict that bugs me.
Re crippling anxiety - I highly recommend improv classes.
This year I sent tons of CVs, very few responses, a lot of technical tests, some interviews where "you don't fit the profile"
Companies usually like me when I start working for them, but to "cross the chasm" is hard.
Some thoughts/tipps: Start your interview with: "I happy to be here ... am really nervous, i couldn't sleep last night." ... that removes questions marks in recruiters had about your eyes.
Don't tell em about xanax, better, don't use it.
@pookieinc 3+ years are not impressive ... i code for 15 years and possibly the guy who are you talking about your job too ... so don't behave like the god of coding.
@pXMzR2A 270+ job applications ... hmm your resume must be shit or you apply for jobs you are not qualified for ... i would love to see it, there must be a major bug in it :)
... and btw. congrats and merry christmas
 Specifically, I cut out wheat and corn altogether, reduced my carbohydrate intake to less than 50g a day, and never ate anything with added sugars.
I'm attempting the numbers game approach (apply for 100 companies, 5 will get back to you, select from those 5), but I've hit the edge of: what if there are none that are willing?
Thanks for the luck, will keep banging head against wall until a job is found. Happy holidays!
In the last 8 months, I have submitted 270+ job applications, received 3 interviews, got rejected by all three, none of which were high reputation companies.
Great to hear you had a success! :)
Thank you for reminding us not to give up. A lot of your story sounded familiar, although you were way more persistent than I was. I'm 33, and recently got rejected from two different bay area "dream job" companies after making it through several phone rounds in order to fly out for in-person interviews. The more recent of which, I got nervous the night before and only got three hours of sleep. The hardest part of that rejection was wondering "what if" I had been just a little bit sharper.
After the second rejection, I accepted a position with a small defense contractor near my home in Washington DC. The bureaucracy and mindless restriction are sources of endless frustration. The combination of billing by the hour and a long commute leave very little time and energy for keeping up the job search.
Reading your story reminds me I have very little to complain about. Thank you for posting. I'll use some of this time off to send out some more applications. Hope you have a great Christmas and good luck once the new job starts!
It's not like most of you are blue-collar workers either. Those supposed job 'shortages' at those big tech firms seems more like a sinister collusion strategy to flood the market with cheap labour possibly.
In parallel to interviewing at that company, I also created my profile on Underdog.io. I spent Dec. 5 to Dec. 16 talking with 7 different companies in New York. I saw that their Salary range is lower than in Bay Area so it did not go far.
On Dec. 13, I created my profile on Hired.Me. Since then I have had 5 offers. I have made strong connection with one of the company and will be having in-person interview in a month (I have 3 week family wedding planned in Jan :)).
From my experience, there are so many companies looking for quality engineers. If you are having hired time getting hired, I am open to talk with you. I personally don't pursue working at big companies for the sake of them being big. I am looking for a company where I fit in based on my programming design sense and culturally.
I'm 27/M/Single/SF - so I don't have much constraints as someone who may be older with family or in non-tech savvy part of the county.
I hear you about the anxiety. I managed to land an interview with nvidia in 2001 and was so nervous that I couldn't eat or sleep for the 24 hours before the start of the interview (then ate lunch with them at their cafeteria and was wolfing food down like an animal). Didn't fare well, but a year later of hunting and working as a substitute teacher, I ended up working with a great team at FedEx for a while and went to being a "computer scientist" at the army research lab after that.
Anxiety is a challenge, but it can be overcome! I'm even in the process of starting with "toastmasters" to get me out of my comfort zone and learn how to be "on" around strangers.
Again, congratulations and thanks for sharing!
Is the BigCo interview process just that arbitrary?
In a way it's kind of belwildering how radically different seem to be the job hunting experience for many HW users.
You see so many posts like "I had multiple six-figure offers", or "it's impossible to find enough candidates for the position" and then you see posts like this.
Find the easiest thing that you are legitimately passionate about. Do not work on a project because it is in a popular space, because you are looking to make a quick buck, or any other reason than you are undeniably interested in the space.
If you are not interested in the project, it will become boring and you will lose steam. Even if you are interested in it, there will be boring tasks to tackle. It might be that the only project you are truly interested in tackling is not an easy one (as is my case). I have a massive graveyard of failed ideas that halted at some point because I lost interest and/or realized they were dumb ideas. The only one that has lived is the one I keep coming back to (and am now working on full time).
These are not factual statements, just a reflection of my experience. Yours may differ.
We find the time and energy for those things that we place importance on. If the project isn't important to you then maybe it is time to move on. If it is important and this is just a temporary state - perhaps due to hitting a difficult part or a bit you don't enjoy dealing with - you need a strategy.
Break it down into manageable chunks. Put a date on them. Make sure however that the dates are achievable, there is no better way to become demotivated than to constantly feel you are falling behind.
If your thing hasn't shipped yet, can you get it to a release version sooner? Can you cut stuff out? Getting your project in front of other people can be a real help.
Treat the project as a first class citizen alongside your other work. Meaning that even if you can only devote 4 hours a week to it, those 4 hours are scheduled and used. Don't push them out for other work. Plan what you will do in that time, ahead of time, so you don't start to procrastinate when you sit down.
We turned our side project into our main source of revenue, you can read some of that in the first chapter of the book I wrote based on that story here http://rachelandrew.co.uk/archives/2014/03/21/chapter-1-the-...
1) Every day. I've seen this with working out, side projects, or whatever... I can't stick with commitments if I try for an "every other day" or "only weekdays" strategy. Has to be every day. 
2) Track it in a visible fashion. GitHub's contribution calendar is fantastic for this. I've got a text file named 'work-log.md' in my side project's folder, and I update and commit that file whenever I spend time on my side project-- even if all that I did that day was research, rather than coding. My current high score/longest streak is 59 days in a row, and wanting to push that higher is incredibly motivating. With workouts, some sort of fitness tracker serves the same purpose.
3) I don't beat myself up too long or hard about screwing up. There are some folks whose "longest streak" on GitHub is 365 days or more. Good for them! I'm always sad when I realize I've missed a day, and I often take a break for a week or two once that happens, but I've never even thought about just quitting. Just motivates me to try and do better next time.
 One exception to this was biking to work: I never really biked on the weekends, but it didn't prove to be a problem. Probably because commuting by bike was so hard to forget about.
For someone, a side project might be about solving arbitrary problems such as trying to write a Tetris clone under, say 1024 bytes on x86-64 Linux machine -- something which has absolutely no real world relevance whatsoever, while for someone else that'd make no sense and be waste of time. Probably they'd much rather build something much more concrete, say a real product (say a web app) actual people can, and hopefully will use.
Perhaps it is a meaningless and arbitrary attempt at making distinctions, but I find it relevant for myself as I certainly fall under the first example, while many here in HN fall under the second. I feel this definitely plays a role in what we consider "side projects" and how we deal with them.
What I've found to be effective is to have a list of goals roughly by week, for the next few months, and then each week to assign myself a small list of tasks for each day. I also try to mix up the type of tasks over each day -- some are fun and I'm excited to do them, some are more tedious but have to be done. So when I do some tedious work I reward myself with the fun tasks.
When I fail to meet my goals I allow myself to get angry with myself -- almost a disappointed self-hatred. But only for a few minutes, and then I move on. Perhaps some people will disagree with this technique, and might suggest only positive self-reenforcement, but if you're not totally honest with yourself it's going to be tough to keep yourself on track.
Whatever you do, you should definitely start by examining your goals and motivations for working on your project, since everything entirely depends on these.
I don't. When life gets busy with other I am busy and the other people are my priority. If you are with your family and you are not really there, you will feel guilty later on work and not be there either.
Steve Pavlina explains it better than I do:http://www.stevepavlina.com/blog/2014/12/130-days-off-per-ye...
What Steve could do after years of training(and reading thousands of books and learning from others) is probably not what a normal person could do. But they can apply some of the ideas.
In my experience, people from the US tend to work to much, but not really work. e.g When a German person works, he works, do not distract him because he will get upset.
I had never ever got bored in my entire life. I have always done whatever I wanted to do. Life has been tough to me at some times, but always in the sense of the Lion on the wild, that if he does not hunt, he just dies.
It is just so easy today to choose safety, but also living on a cage.
Go to the zoo and look at the animals there. Have you ever seen an animal(lions, leopards, elephants) in the wild?It is completely different. It is the same with people.
Take note of things that inspire you. For me, books or other people's projects. Show your work to your friends and try to convince your friends to work on projects with you.
Find programming languages / environments that make it easy to spin up a simple project without too much overhead. Start small. Last I counted, I have about 140 folders in my dev directory. Each one has a small project I started up. One turned into a successful company. Another won a DARPA challenge. A few others were released in various forms. But most got dropped because they just weren't as cool as something else. And I think dropping projects isn't just ok, it's great fun and will help you find that project that's worth completing.
Also,sometimes the only thing keeping me going is the sunk cost fallacy. I don't want to just give up on something I spent months or years on.
But one think that did help me out was learning to recognize the difference between moving forward and moving in circles. Not wasting a lot of time refactoring stuff - especially if a lot of time has passed - because your tastes or mood has changed. I have one project (a web project, nothing anyone would care about) that I literally rebuilt from the ground up at least three times already, just because I got sick of the current framework I was using. I wasted a lot of time moving in circles because I didn't actually want to finish the project, but I did want to keep working on it.
My advice is to make is easy for customers / users to give you feedback. Use a support ticket system and provide email links on your homepage.
I challenge anyone to show that the math for this works out. Everyone I know who has put effective effort into so-called 'side projects' is either living off saved wealth, working 20-30 hours/week on lucrative consulting contracts, and/or has an SO that works their ass off in some all-consuming, soul-crushing, high-paying career.
The thing it came down to for me is understanding how incredibly rewarding it is to create cool things that I use. For example, the digital situation of Chess really sucks in the work right now, so for the last few months I've devoted about 10 to 15 hours a week to created a catch all solution to playing chess online and on your phone. It's gotten to the point where I can now use it to play with my brother, dad, sister and friends. As a person that lives a fair ways away from my family, it's really rewarding to be able to do something like that. I love getting input from them, and just being able to bond with them over something simple.
As far as the motivation, and not just the desire, it also came down to understanding how I work. I burn out quickly if I work on something a ton, and so I have an incredibly strict schedule during the week, and then completely leave the weekends open. Essentially, I kind of made a compromise with my personality so that I ended up happier, and my professional life came out ahead.
In addition to that, I educated myself. I realized what I wanted to be in 40 years, and I found out how other really smart people did it. The books below really had a major influence on me in motivating myself to work harder at everything, and to motivate me to work on side projects.
Lastly, and for myself this is huge, I surrounded myself by people I wanted to become. It's really really really hard to do stuff on your own, so I worked hard to become friends with smarter people than me, that challenged me at life, for lack of a better way to put it. I know stuff that like may sound a little clich, but it really is one of the most rewarding things I've been able to do in my life.
Book List: 1. Without their permission. Alexis Ohanian2. Outliers. Malcolm Gladwell3. How to Win Friends and Influence People. Dale Carnegie4. Hackers and Painters. Paul Graham
If you're spending all day in the office or with your clients you're going to be burned out and you won't have the energy to get down and dirty into the denser parts of your own project.
Be religious about setting aside your own time
Still, my biggest problem isn't losing steam its simply too many choices. I need to get better at deciding I'm not going to do a project and putting it down for good.
For personal software projects I've discarded all engineering principles and do what I would call structured hacking. Everything is neat and tidy but only up to a point that it lets me progress swiftly.
If you choose to work solo, bring in a friend - preferably who is working on their own side project - to mentor you. Try scheduling work time together or swapping expertise (e.g. design feedback or code review). I worked on a project in parallel with a friend's project, and we did IDoneThis updates to each other every day. That accountability helped to motivate both of us, and rather than give up when we got stuck, we had somebody to talk through issues with.
An organizatoinal tip is to set up a personal kanban and break everything that you are doing into tasks. Jumping into a large project that takes months can seem like a neverending tunnel, but being able to see incremental progress in terms of completed cards every day can be motivating. When you start to lose focus, look back at the cards and see what you are supposed to be working on or pick another card.
Finally, don't lose sight of the end user - build something that people love, and keep dialogue with your customers before you launch the product. Get feedback, shadow them, identify pain points, grab coffee - a project become a lot more real when you humanize the end user.
1) http://thinklegend.com/commit/ - I have "do 30 min X project per day", which isn't much but usually the hard part is starting. It's easy to kick out 30 minutes work, feel good and add a link to the chain.
2) Yesterday I itemised a bunch of push and pull factors about my current job and my side project. We regularly build amazing things for customers but forget to do what's important to us. We get caught up in "urgent" and forget about "important".
3) Startup podcasts. In the absence of a mastermind (Anyone else in Johannesburg?) they keep me in the mindset of building. They're like a small daily escape into a world of possibility. I listen while driving, so after the work-day drudgery I'm reminded of what I'm working towards.
 Which may mean that the MVP takes a day to build, or the project is something that will be sufficiently useful for you that you can work on it for six months without getting bored.
Figure out how / when / where you're going to release them, and work towards that moment.
It's hard to see value in something until you add it, this is why your greatest achievements will be hard to see moving forward.
It's hard, especially when a particular feature needs days/weeks of effort. For that sort of thing, you just need to persistent, I guess.
(disclaimer - I maintain the site)
Based on my experience of running the site over a year now, there is nothing wrong with side projects that do not become "success" (whatever the definition of your success may be). The most important part is the building it and shipping that v1.0 (or v0.1.. whatever).
What I mean by this is that you need to rationalize why doing something is important to you in terms of its meaningfulness and impactfulness.
For example, let's say I'm a web developer with zero knowledge of building a mobile app. And I want to build a mobile game in ios that doesn't exist in the world yet. When it comes to pushing myself to work on such an app, I remind myself that I want to become a programmer with versatile skill sets desired by many employers. That will be your high level goal.
However, this goal might be too general and isn't convincing enough for you to keep working on the project. So, let's make your goal more specific. So, in this case, it can be that you are super interested in learning about technical details behind implementing the game whether it is about designing the db relations, software architecture and etc. That will be your middle level goal.
Finally, if none of them made you want to work on the project, let's dig deeper and make a goal really personal to you. It can be something like you want to build it because you want to play this game but you cannot find anything like it from anywhere else. That will be your low level goal.
Not finishing projects is a really bad habit, even for side-projects. Try to set a goal of at least publishing your project in some meaningful form - maybe it is just a blog or a forum posting.
Also be careful of vetting your ideas before you start. Make notes, paper prototypes, drawings or something that allows you to better reflect on and filter your ideas.
- The first is that while I've been using it (or a version of it) for about 5 years, there are a lot of features I want that are still missing.
- Second is wanting to see it through. There are loads (over 20) of unfinished apps in my \Dev folder. I think some of them are epic ideas, but decided to focus on one and see it through.
- Third is to make some cash. That's a nice to have, and I'm ok with it not making anything, because of reason 4 -
- I love working on it. It's rewarding like nothing else is. I once told a friend (quite seriously) that solving some hard problem in it was better than sex. He told me I was doing sex wrong. Maybe... but I can stare at a piece of code for ages after writing it, if I think it's good. Narcissistic, I suppose, and probably deluded, too. But there it is.
- Fifth, and last, I've learnt more from it than any other (single) project I've ever done - privately or professionally. Not just code, the cloud, document v. relational v. graph dbs, but also the not-so-great value of TDD, the value of DevOps, and arguably the most important, the value of just not accruing technical debt, ever, at all. If you gave me another minute I'll think of a million other things it taught me.
For me, side projects are things I do because I'm interested in them and have free time to invest. If I don't, I don't work on the project, and it's no big deal. Yeah, sometimes I'd love to have more time, but oh well.
It'd be different if I made money off of them, but I don't. To me, that would make it a job, and not a side project.
I get motivated even more seeing the github streak (github.com/rajeshvaya) and it a very small measure which helps me going as well.. everyday for past 64 days I have made sure I spend my first 3 hours of my morning time (even on weekends.. I make sure I get up early)
after you get this initial start it is kind of self-motivating which will keep you moving forward.
What i think is just 2 important things to get this:
1. Work on the projects which interest you and not because other people think its cool or just to make little amount of money
2. Try to spend first few hours of morning on your side project rather than ad-hoc amount of time and different time-span of day. Keep it regular, same time just like gym
For things that are fun to make but nobody would want to use, beats me. Those things I usually play with until I run out of steam, at which point I figure I've learned what I'm going to learn from them and move on.
You should think about what you will achieve in the end. Especially if the side project is one that you can make use of yourself, the effect is even bigger since you will have immediate benefits from the outcome.
Use your side project as your playground to learn new things by doing mini projects within your side project:
- Want to learn about testing? Add test coverage. - Want to learn about webcomponents? Find a way to integrate it.
You don't have to finish all the mini projects. Dropping something is fine, you still have the experience and knowledge!
What really helped for me in keeping steam is publishing the source of my side projects on GitHub. The idea that someone else uses your code is very satisfying. Once some traction comes, the pull requests and issues start coming in and it gets even more fun.
And when you get bored? No problem, just switch to a different side project or think of a new mini project.
I love to code and I love to build things, and I would lose my sanity if there was only one thing I ever worked on. Plus, one of the best things about side projects is that there's usually no pressure to really get it done, so when I load my workspace for a side project, I'm always excited to get started, because I know nothing really important depends on it. And unsurprisingly, I've learned so much from random fun stuff on the side that I would never have learned otherwise.
Once that is done, you always have the whole portfolio of unfinished-yet-related things sitting there. If you can't work on any of them, you start a new one, but eventually you hit the point where you can see that you're just redoing an old one. You don't get stuck on overengineering it because the context of it is already as a small part of a whole. If one of them proves to be a really good idea and more deserving of attention, you chop it out of the original context.
I do it right. I take my time. Spend much time thinking about the next step. Draw and stuff. Spent like 12 years experimenting with different geometry games. Looking for the one that feels right.
I have this stack of project sketchbooks. Sometimes I look at the stack and think "I'm nuts".
The final climax seems close.
Sometimes I wish a bunch of enthusiastic highschool kids would take my project over, but not quite yet.
Also there's bucks in it. It's got material worth.
Unfortunately I don't always have enough time to push code every day, but that doesn't mean I can't answer emails, add items to Trello and be active in the Gitter chatroom etc.
For those interested, I'm currently working on Cachet, an open source replacement for StatusPage.io (https://github.com/cachethq/cachet)
Today I created a CrowdIn project for translating the language files into other languages :)
I have yet to have one of 'side' projects make me rich enough to fund my next side project, though... Really the side projects just keep me fresh and expose me to new technologies concepts in a way that I would not get from client work.
Also I have a physical calendar in my room. I want to go to the gym 70% of days in the year so cross a day off each time I do cardio/lift. I stole this technique from Jerry Seinfeld who used it for writing jokes :)
It also helps me to work on things that I think really matter. For some people that is building an easier to use templating engine. For me, it's building security and reliability.
It doesn't matter if it's two our daily or two days a month. If you are working on something you like you will prioritize it.
So don't be afraid to kill a project that you don't want to prioritize.
2. I structure them in sprints.
3. I have a clear life cycle for them (plan, implement, promote, evaluate) that feeds into 1 and 2 .
This means that it always feels possible and rewarding to work on projects. Hack your limbic system! ;-)
I have nothing else to do nor I'm likely to achieve anything else.
If i'm willing to endure major pain, it's no longer a side project.
Not over working at day job.
1) Money2) Fun
As simple as that :)
My projects don't involve writing much code, but there are always different things I can be working on. I can be working on the visual look of the website. I can be working on firming up my definition of what the project is about. I can be working on talking to people and recruiting prospective audience members. Etc.
If pushing code is turning stale, what other thing can you do to further the project? Those other parts matter and you may be more able to address some other piece of it at some point where "pushing code" is the last thing you feel like doing.
Not just programming, but the things that shape a programmer, business handling skills and etiquette and more.
And usual things like * learn a new language a month * build a app a month * code daily apart from regular job * read a book a month and more..
Beyond that, create a business that allows me to work from anywhere and can sustain my current standard of living.
I've applied to about 6 places already and have optimized my resume.
Secondary: Vast opulence.
Tertiary: Interplanetary travel.
I hope you have a great year as well!
The way it works is simple. When you want to do a disk operation, first, you write down in a special place (called a journal) what you are going to do, at a high level. "I'm going to delete this directory and all its files." Then, you go through the steps of actually doing that. Finally, you record in your journal that's what you did.
Now when power is interrupted during a disk operation you simply look at the journal and you can complete any operations that were in-flight at the time of the interruption. For example if the journal says "Delete X folder" and you see it still exists, now you can pick up where you left off.
The application to interruptible programming is straightforward. I have an actual paper journal and I will in a few words explain a task to the journal before I begin. Often I end up with a hierarchical journal, like
get the unit tests to pass the unit test doesn't pass on OSX because postgres isn't running start postgres the unit test doesn't pass on Linux because the postgres credentials are wrong refactor postgres credentials to work right on both platforms one particular Linux machine still doesn't work Is it 32-bit related? No Are we using the same compiler on that machine?
As a side benefit, I now write really good commit messages, because I just write what my journal says I did. Which is quite a lot more detail than it was when I was trying to remember things after the fact.
- Learn to manage workspaces efficiently on my OS. I can't afford to open all the files for a project and get significant work done, so I keep more projects open at a time. I went from typically using 4 workspaces before I had a kid, to consistently using 12 workspaces these days. It's nice to have 3-4 projects open, spread across 2-3 workspaces each.
- Documentation of my own projects. I keep a text file for each project, with notes about what's been working, where I'm getting stuck, and which resources are helpful. I've used more complicated tools at times such as issue trackers, but simple text files with names such as notes, next, and mental_dump still offer the least friction for recording the little notes that make it easier to pick up wherever I end up having to leave off when I get interrupted.
- Recognizing my mental state, and what I can get done in any given block of time. Sometimes that's moving a project forward, sometimes that's catching up on HN, sometimes it's reading a technical article I've kept open for a while. Sometimes it's recognizing I shouldn't try to get anything done, and I should sit and stretch instead.
I find that I'm using each of these strategies in my day job as well. I've got to go serve some porridge now, but those are a few things I've come up with.
. Maintain a list of tasks you can work on, and make it good enough that you can blindly pick one up and start working after a switch.
. Saving context via documentation/text/workspaces as japhyr mentioned helps me a lot. Whenever i come across an issue that i cant handle at that time, i throw it in a text file. At the end of a session, i organize the list. When i come back to task X, i just look at the list and start working on it. Just going through the list, seeing what I did and what remains is the fastest way ive found to warm up and get back in the flow of a project.
. Optimize your workflow. With a tiny chunk of time like this, 5 minutes setting up a workspace or even re-reading an article is too much. So save as much of the workspace as possible, take notes on how article X applies to your project.
I would keep a task list of short tasks. Use a spreadsheet or text file.
If you come up with something else to explore that you'd typically dive into, don't. Instead, just record it on a separate part of your task list for future investigation.
Realize that you can do a lot with 5 or 10 30 minute segments, especially if you focus on the right tasks.
Set a timer, if possible, and take the last 3 minutes to leave yourself some context (in the bug tracker if you are fixing a bug, at the end of a document if you are writing something, etc).
Put on headphones for the 20-30 minutes you do have.
Postpone any really deep thinking until after 8.
If you find that the entirety of your to-do list is made up of things that couldnt be done after a beer, then you are going to be unproductive in your work environment. Focus on eliminating the interruption. You may have to hack together a solution that people who dont spend long periods deep in thought will understand.
For example, wearing earbuds even if no music is playing, randomly shutting your door, making an emergency script that opens MS Excel when someone walks in so it looks like you were working rather than wandering Wikipedia so your subconscious mind could solve a problem, writing a description of something you are working on at the same time every day on your office calendar so that people will subconsciously not bother you during that time, and speaking at half speed when people ask you a question so that they jump to conclusions about what you might be thinking and reprimand themselves for not being more prepared before they come to you.
Basically it comes down to the liberal use of improvisation of your work environment isnt structured in a rational or logical way. I faced the same problem at a tech support job I had that demanded 3-8 computer repairs a day but didnt delegate phone or front desk support to employees on a rotating schedule. The level of stress was at least 3 times higher than it needed to be, which is why I inevitably burned out and quit.
If someone comes to talk to me, I write down any actions that come out of the conversation immediately, so I don't lose track of them, and try not to promise to resolve them immediately - that adds to the above list, so things naturally rotate in and out over time.
I like to take half hour walks to think - that helps ensure that I'm really working on the right things on a longer timescale, even though I get distracted on details at times.
With code, interruptions have forced me to think in terms of breaking work up into small, atomic commits. It makes it harder to do larger design/refactoring exercises, but it forces you to get better at splitting work up.
With smaller tasks, I tend to make a lot of tickets to track what needs to be done over larger timespans, which conveniently makes it easier to delegate.
Each piece leads to the next, and passes on the context needed to get back on task. Which is exactly what we should be doing anyway.
It's a mental framework to help a person drive their interruptions to zero, in order to work with full concentration on a single task; and to take full advantage of blocks of time as small as 30 minutes. It's especially helpful for combating internal distractions, such as a tendency to spontaneously or unconsciously switch away from work to web browsing or email. It helps one become consciously aware of such interruptions and their impact on effective time worked.
This approach can reduce your work in progress tremendously. The benefit is, that it becomes easier to choose from your open tasks.
When everything you need for your work is ready, you can finish your tasks. Otherwise you start working and interrupt yourself because you have to wait for others.
Making assumptions on not not well defined requirements may lead you to work which will be discarded upon wrong assumptions.
And last but not least:
Work on things that matter.
Follow those things and I promise you that the disruptions will disapear.
My job has a mix of rote work and analytical work so I try to switch between them to maximize my focused time without fatiguing too much.
Simple timer (loud). Set for 30 minutes. Work like hell.
For software development specifically, you can change how you approach programming and find that it's possible to still make progress on software in 30 minute increments.
Practice thinking about your project throughout the day. Get the "big idea" stuff done while you're on the toilet, driving, taking a shower, getting lunch. Keeping the project "loaded" in your head helps to predict architectural issues, makes it easier to break the project down into smaller pieces, makes it easier to get started coding, and keeps you motivated to work on it.
Choose a list of small things that need to be done. Every project has them. Don't try to get the small thing done completely right the first time. For example, say my project needs to be able to read email headers. How should it go about that? (Think about that throughout the day.) It will need a function that reads a message and spits out the headers separate from the body. Write that, that's easy. Then it'll need a function that reads each line of the headers, and returns them as an array. Write that, that's easy. Then it'll need another function that takes each element of the headers array and splits them into label: value pairs. Write that, that's easy.
A nice side effect of this approach is that you end up with some very clean code. Each function does one thing, does it well, and its output feeds naturally into the input of the next function.
Build a library like this. If you only have 30 minutes at a time, your personal library of code is essential. Maintain and organize it. (That's another thing that can be done in 30 minute chunks.) Keep a notes file open in a tab in your IDE and do regular brain dumps to it. Write unit tests, or go back and do cleanup on a function that needs cleaning up.
Then, on a regular basis -- at least once a week, in my case -- retreat to a coffee shop or call up a buddy you have that's a writer, and set a "productivity day". The key is to get out of your regular environment and have another person with you. You each end up pushing the other to focus and be productive. Use this time to put all of your functions together, do some testing, and build scaffolding for the "big" parts of your project. My session about a week ago netted me almost 1,000 lines of added/deleted/modified code, according to Github.
It's a very different approach from the usual method of "sit down and bang it out for hours," but it works, and it helps to defeat all that mindset about flow that other programmers struggle with.
In case (1), it's fun to imagine that your brain is maliciously lying to you about the progress you'll be able to make, but it's more ignorance than malice. Get good at recognizing the real obstacles and talking yourself through them. Is there some key piece of understanding you're missing, or some design problem you couldn't solve in your head? When you have to go long periods during your day without access to your tools, you'll build up questions that you need the Internet, a computer, or pen and paper to answer. Remember what they are; don't just unconsciously make assumptions or treat these questions as unanswerable. Another mental blocker besides lack of understanding is worrying prematurely about the properties the finished product must have (it must be good, it must be well-written, it must look beautiful, it must be a complete treatment of the subject, etc.). Another blocker is stacking up tasks in your head so that one blocks another -- I don't want to do B until I've done A, but I don't have the mental energy (or other resource) to do A right now, but I should just force myself to, but I can't... These blockers will dissolve once you recognize them and look at them properly. If you feel any resistance to working on a task (whether it's a short, 20-minute task or a longer task to make progress on), immediately ask yourself why.
It's particularly frustrating, for example, if a 20-minute task is put in the front of your queue, ahead of your "real work" that constitutes "real progress." A bug pops up, or a configuration issue with your computer, or an urgent email, or a git conflict. You thought you'd have just enough time to implement and test feature X, which is just a one-line change, and now there's no chance. There's not much to do about these things except to recognize them, and to adjust your definition of "real work" and "real progress" to account for them. If you were going to use the time to dump ideas, code, or text from your head, dump notes into a text file for a couple minutes.
Don't get me wrong: the limits of 20-30 minute work blocks are real and not all in your head. You can go to far-off places when you have hours to immerse yourself in something, and in addition, just the knowledge that you have this time seems to unlock creative thinking. However, don't believe everything you hear about what's possible in 20-30 minute chunks either.
I'm writing about time management generically or from the point of view of a programmer, but it depends on the nature of the task. I've never worked closely with a PM, so I don't know what sorts of tasks we're talking about. 20 minutes sounds perfect for answering an email or two that doesn't require too much writing. When I have to write a longer email or a design doc, blog post, etc., I write in my head while doing other things and then dump it out, or I dictate into a voice recorder (which is valuable for getting ideas out whether or not I later listen to the recording).
I echo what others have said about keeping your work windows open on your computer, and keeping a log of ideas and what you're going to do next when you come back. Hope this helps.
While I am on that topic, one way to be more productive when your focus is broken up is to find ways to track where you left off. If you do a lot of reading of dead leaf materials, book darts can mark the exact line you were on when you stopped, which can prevent you from scanning two pages to find where you were. Online, leaving things open at the place on the page you last scrolled to and similar. I try to open tabs I need to do something with later even if I can't get to it just yet so I will, at some point, check that tab and go "Oh, yeah. I need to do that thing." Otherwise, I may completely forget about doing that thing at all on that day. It may get ignored until the next day -- or the day after or whatever.
I also found it helpful at BigCo to make a spreadsheet and track certain things. Creating the spreadsheet took just a few minutes, updating it took a few seconds here and a few seconds there. The amount of stress and distraction from worry it saved me was worth many times the amount of time sunk into creating a simple tracking mechanism.
I agree that a lot of the 'lack of engineers' is somewhat of a farce. If a company wanted to hire 20 people so bad they'd open a midwest office and hire 10 experienced people and 10 new grads from smaller universities and have the whole thing done in a couple months. Have people fly back and forth a couple times a year, get a couple good conference rooms with video conferencing and you're 90% as good as being there, just with a fraction of the cost.
For what it's worth, I suspect there are better opportunities to work remote outside of the start up world, and outside of the technology focused business world in general. I work for a smaller consulting company and about 1/3-1/2 of the 100 or so people (and the bulk of the consultants and PMs) are remote. Other companies in our industry seem similar.
Most of my work since 1998 has been remote, however it is a great deal of work to find the gigs. While it is possible to be a remote employee, most remote work is for consultants.
You may have a better chance at starting out co-located, then requesting remote work to some degree.
tldr: one issue might be that some of the movers and shakers in SF are anti-remote work. That seems to help make it part of the culture.
But read it anyway, because maybe it will help you make progress on finding remote work.
Best of luck.
On the security side they state that no logs are kept, security is paramount and so on. I've found this VPN provider through a torrentfreak post which was listing the top10 most secure VPN providers for 'torrent' downloading. I don't use it for downloading illegal material, but I guess most people do, hence I believe they (TorGuard) wouldn't really wanna know what their users are doing online. :-)
Their site really needs a redesign, though.
Once on Promo Bay.
Great timing on reliability questions - I just finished writing an incident report for Node! All apps were up, but about 44% of deploys failed for 1 hour on the 18th this month. That's the only incident report I've had to do in the past six months:
Our support team is amazing; we have several node devs on the front lines and anything they're not sure about gets quickly escalated to me. One of my favorite things about Heroku is that all customers - paying or not - get real support from full-time staff with deep experience.
Heroku also works great with non-node apps, as you mentioned. We have hundreds of customers running PhantomJS and doing some pretty incredible things with it (like spinning up temporary dynos to walk their content and pre-generate server-side data for client-rendered single-page apps). PHP, Java, Ruby, etc are all first-class and with official buildpacks - plus, since a buildpack is a simple bash script, you can write one for just about anything:
The biggest reason I see folks hacking on less solid services is price. I think we could do a better job of making clear just how far you can go, for how cheap, on Heroku (I didn't realize myself until I worked here). Unverified accounts can run 5 free apps... and verified accounts can run 100! Each app gets 750 free dyno hours each month (there's only 744 hours in a month), and each dyno can handle really amazing throughput with node. To test for yourself, you can write a 'hello world' app, add the free blitz:250 addon, and then slam the app with 250 concurrent users to see how it holds up with nearly a million requests an hour (hint: linear scale without a flinch). You get free rabbitmq, mongodb, postgres, redis, https, etc. All of Toyota Europe is run on node on Heroku, and they only use a couple of dynos per country.
Anyway, I'll end this novel with the conclusion I came to after seeing how the sausage is made: Heroku grows with you. It starts free and becomes cheap once you're pulling non-trivial traffic, and it surpasses everything else in terms of app (vs ops) focus. If you'd like to learn more, I'm happy to nerd out.
Go check them out and let us know what you think!
There is a tremendous depth in that particular rabbit hole. Your success (or lack thereof) in life will depend on you understanding how you got to this point (18, broke, and not even the Army will take you) and at the same time did not do the minimum needed (figure out how to finish high school). The advice here is that navigating life is like swimming, there really isn't any "right" way to do it, however there are ways to do it such that you end up drowning. Understanding that has to come from inside of you.
If you need cash now, I suggest you help older people with their Internet. There are a bazillion of them, they don't know an SSID from a SSN, and they want to be able to participate in the tech heavy world around them. Join a church, visit the Rotary club, walk door to door, or just set up a table at a nursing home (with permission of the home of course) offering "free help with your smart phone, tips appreciated". It won't be rolling in dough but it can keep you off the street and fed.
If you can, visualize what you want to be, and then work backward from there to see what you need to do today to get there. Good luck.
I worked my ass off to build software enginnering experience taking on challenges for little to no pay. That alone didnt keep me fed all the time while I was learning to market myself (and gaining more skills to market).
I did everything from working many day-labor jobs (manpower, laborready, etc), factory work, tractor sales, retail, telemarketing, street preforming, teaching old people to use the internet, etc.
It was a long road but over time I began to get the occasional programming gig for clients in way over their heads with money to burn. Allowed me to build confidence, income, and vital experience. I made sure I earned my keep and got referrals.
So far I have started 5 companies, worked for/with countless others, tackled hundreds of fun projects, learned a lot of tough/valuable lessons, and built a network of incredible people. I am now working as a software engineer at an amazing startup and I love my job.
TLDR If someone like me can make it, anyone can. Just gotta work for it and learn how to leverage the resources around you.
Also... ignore the people saying you can't make it without a degree. Many of my friends employed at major tech firms don't have anything but hard earned experience. No one worth working for has degrees as a manditory prereq. Obtaining a degree or two may well be the easier/sane path for most, but certainly not the only one. My path was at least debt free and came with experience I would not trade for anything.
Feel free email me (google for it) or hit me up via http://hashbang.sh . Lot of very successful mentors there that love helping people like you.
I regularly hire development contractors and the two failure modalities I see most often are:
1. Failure to communicate/organize/deliver on time. This is particularly pronounced amongst younger developers who frequently end up losing focus midway through a project and "go dark." The #1 way to avoid this is to set expectations, meet those expectations, and communicate along the way. Given your educational background, this is probably the biggest hurdle you have to overcome.
2. Inadequate assessment of abilities. Unfortunately many younger developers think they're a lot better than they are so they try to tackle super-challenging projects. If you're young and inexperienced, start with the easy stuff (ie. basic CRUD apps for boring businesses). Probably the best way to improve is to latch on to a popular open source project and find a mentor in that community who can teach you best practices around design patterns, testing, etc.
Finally, I'd suggest that you work a bit on your personal marketing. Don't focus on your age or that you're "hungry." Fake it till you make it. Also, put a clear list of skills (with demonstrative projects linked) right up front. (I'm only 21, but you wouldn't know that from the front page of my website.)
Pick fruit, cut grass, clean pools.
Living in abundance at young age sometimes stops people from carefully thinking what in their life is important
It is really great that you have figure out your future path I think you really should continue learn and practise, you may not necessarily need to work for some established companies, there are tons of open source project that you could take a look.
I wish I can figure out my path when I was 18 man, good luck.
I don't like to make rushed decisions when it comes to money or health. If you're having trouble getting a job as a developer, consider that you have made a huge mistake in dropping out of high school and employers are not going to take a risk on you even if you are a true talent.
Anyhow, if you can go home, I think you should. If you opt to get your GED, that's good for your personal development but not much else. Most employers are going to be leery of you in any case since you couldn't keep it together enough to finish HS.
Aging into your 20's will help, and if you're any good, you'll get enough freelance jobs or contractor jobs that you'll make up for your past mistakes on your resume and can try out for full time positions at companies you like.
I am also not keen on the idea of working for free anywhere as an intern for future promises of employment or purely for experience, especially with your history. Don't let yourself get exploited.
Get some sleep.
Find small IT services firms in your area, call them, and ask if they're looking for people. I guarantee you're at least 2 steps above who they normally get, and depending on their size and customer base you may be able to get good local freelance development projects and references while helping them keep their customers happy. You may also get a variety of experience with both business needs and end users that may be very valuable to you later. You'll also help with things that seem incredibly simple to you like basic spreadsheet or macro stuff - something you'll spend 15 minutes on that will literally save a business staffer or manager days of error-prone tweaking by hand.
The more you slip in showing the client something/anything, the higher the expectations of the client will grow.
For example, 'oh it will take about 2 weeks to get X done'. If you get to two weeks later and you're like 'sorry, taking longer than usual', the client's expectations will be start to boil up as a function of their trust being tested (corollary - when someone vouches for you as a freelancer, you will destroy their trust if you don't deliver and the client comes back to them).
Show progress/wireframes/communicate progress in a non-condescending manner. One extreme is no communication at all, the other extreme is participation in daily progress meetings with the client. Slant towards more communication, as miscommunication is at the root of most freelancing evil.
Your dismissal of the education system is a little sad too but as a non-American, I'm not in a position to judge the situation. Despite the bad rep education systems get, I think the benefits of formal education can't be understated. It's not just the skills you learn directly from courses but the critical analysis and other soft skills that you pick up which are often most valuable. I'm glad that you seem to have the interest to direct yourself toward new knowledge - that's just as valuable and not orthogonal to formal education.
I had a look at your Github and, IMHO, it's not something that would cause me to hire or partner with you. That is one person's random opinion on the Internet though so please don't take it as rude or disheartening. You are writing code and it is interesting, that's a great start especially for someone as young as yourself. Keep writing code when you can and I'm sure you'll end up doing something you love.
Good luck and I hope you get some good advice from this thread but remember that you should put your health and basic needs first. Passion and repositories usually aren't enough to pay the rent.
1. You need to make money somehow. Worst case scenario you go to work at something like LaborReady or Manpower. It's exhausting work but if you show up and put in a little effort you'll always have work. For a little while I was on a request list for companies that used Labor Ready. It doesn't take much to stand out from the crowd there.
2. You need to get exposure. This can happen through Github, OSS projects, and your blog. But most important find your niche. Become an expert in something that there aren't many experts in. I got my first real job because I became expert at Perl at a time when there weren't many people claiming to be experts in Perl. It can be a language, Framework, technology stack, whatever. After you're first full time job though you will gain contacts and a network. You can then play that out into career growth.
Nothing is guaranteed but you have options.
Does anyone know of any similar programs elsewhere in the country? (Looks like the OP is in Georgia)
Just apply. Stop hesitating. I sense way too much questioning from you regarding your own skill level and how you fair out there.
If you only have a month to come up with some income, you need to get a job doing construction, mowing lawns, etc. Just do something to eat while you apply for dev positions.
And keep populating your GitHub account. That never hurts.
And as immoral as it seems, DO NOT be afraid to lie a little. A lot of people here will dismiss the need for white lies in reaching most levels of success, even if that success is landing a dev position that pays 50k. Don't listen to those people. You need money and a place to grow -- you need to be just as relentless and dogged as your competition is. In America, that competition is a lot of kids who want green cards, a lot of kids who have degrees, and a lot of kids who have no heart when it comes down to grabbing opportunities. Don't overdo it. But it really won't hurt to say that you're a little better at what you do than you actually are. It wouldn't hurt to say you've built a few IRC bot clients a few years ago when you didn't (be prepared to explain how you did that on the spot, though).
Nothing about the wild teaches us that hunting is easy. Just because we're civilized animals, don't believe for one moment that it's not just as harsh in society when you're trying to eat as it is out in the wilderness.
Finally: It seems like you already know this, but just to reinforce this value: don't be ashamed to take a job that you'd normally considered beneath your skill set or potential. Ever.
Good luck, my man.
I know this will be a controversial suggestion, but I am offering it as someone who takes his own advice (I'm in the Army). This suggestion isn't for the faint of heart.
I would say if you're not a conscientious objector, you should go down and see an Air Force recruiter. They have a pretty good selection of technical jobs you could do.
Then you'd get out with the GI bill in a few years and they'd pay your rent the whole time you're in college. 36 months of tuition plus a salary stipend of an E-5 (sergeant).
Just something to mull over. The military does actually have some pretty cool mentally stimulating work, if you have the brain, which you obviously do.
#1: An internship is probably easier to come by than a full-time position, since it's less of a risk for employers. You're still young enough that internships are appropriate; take advantage of that.
#2: You don't have to advertise the fact that you got a GED. Just list the years you were in high school, or don't list education at all. Even when I was still in school, I never put my GPA on a resume. As an interviewer now, I never even look at the education section.
#3: Write a good cover letter that summarizes some of the cool projects you've built, like LoveOS and Derplang. Be sure to explain _why_ they're cool.
That is true. But a little bit of "I'm God's gift to humanity" will go a long way. Try a little. (A little.)
I suggest going to meetups and namedropping your GitHub
> listed all that I've done on my GitHub, Linkedin
Do that! Unless there was some rubbishy work that doesn't enhance your market value, use your existing work to prove yourself.
Try going to meetups and namedropping your GitHub. Say enthusiastically: "Wow, I love the way WebWorkers fit into Angular JS. I put together a project on GitHub ... exciting stuff, take a look!" Getting back to my first point, no one minds a little arrogance so long as you have something to back it up!
Go find any job you can get, most of my friends did best buy retail. Get your GED then do 1 year of community college taking intro CS classes. Do that and list out all your github stuff in a portfolio, then you will seem much more desirable and at least a defendable risk to take on.
Lastly, I've heard good success stories of people who've been to dev bootcamps (such as Hacker School etc.) which excel in getting you competent enough for an entry level job in a tech company. A simple Google search would help you find a couple near your area. Save up for it and consider giving that a shot as well.
All the best!
When I was in a community college, I was under the impression that it was not too hard to get some financial aid. Would it be possible for you to work part-time while studying?
Although you can do so much with your programming prowess, going to college would only help. See if you can get into community college. Spend an year or two there, work hard, make friends, and then transfer out to a better school.
What you don't say is how you've looked for work and what happened. Do you apply and never get called back? Do you get interviews,but no offer? Are you willing to relocate or does it have to be remote work?
Otherwise, just keep looking and programming, you seem really passionate about it and started at a very young age (I begun programming when I was 22). If you really need some money, try anything that pays your rent/food/etc. and on the side keep looking for programming gigs.
I don't think it is a matter of luck, so I will just wish you a good night of sleep and a more relaxed mind.
Sorry about my english, lack of practice hurts that much.
If you want a simple business model that works, sell t-shirts on a high pedestrian traffic area or tourist trap area (pier 39 sf). You may even clean people's car windows for tips and pay at gas stations if you ask the owner|manager & explain (many gas stations are independently owned.. Expect to have to visit 10-15 stations to get approval and be super sincere). It's generic hard work, but it's doable without skill or funding. Also sign up for TaskRabbit for more skilled jobs that could pay more. (See a pattern.. Try lots of things and hustle to get to higher paying gigs.). Btw playing up youth leads to money... Stay clean, shave, youthful attire and get a haircut if needed... You're the product if you offer a service. (Either look professional or super pathetic, in between leads to less cash.)
Some religious organizations will help you, others like most of those in Silicon Valley, only do happy-clappy and no social service volunteering as do others in poorer areas. In fact if you ever had to bet outright, don't bother begging from rich people, beg from lower/middle class areas.
If it's a super emergency in the US, apply for food stamps and general assistance at your local social services agency. They'll usually give it to you the same day in the form of an EBT card that works at Costco, grocery stores and pharmacies. It's a pittance, but it will keep you alive if you budget it very carefully. (Beware: massive fees at almost every ATM. Always get cash back at stores instead.) They may even throw in medical insurance if you're broke enough. (I was a teacher in a minority area and had to help emancipated students get food and get to school... I've seen almost everything. :( ). Rationalize going on the dole as a buffer that you will pay back through taxes many times over later, or to wealth and minimal taxes and let the middle class handle that.
Cut your expenses (don't eat out) and travel as least as possible. Maybe buy a cheapish van and live in it instead of paying rent. Cancel all those monthly Internet services (games, Netflix, Hulu, spotify), perhaps even phone service. Use coffee shops for power and data, maybe go Skype / google voice only. Cut luxury prepared foods too. Shelter, food and transportation (gas) are the actual necessities... Everthing else is a choice to rationalize excessive consumerism. (Stop smoking, drinking and latte habits if present... This is where most poor people hemorrhage money and may harm their health too. For blanks sake don't drink or do drugs but do get good sleep, your judgement (wits) needs to be perfect or one mistake on the street will kill you... You need to be making the best possible decisions as often as possible to bootstrap yourself back to where you want to be.)
Don't count on a startup for income... It's always a long shot / crapshoot and most stories are pure survivor bias hiding the work, pain and luck involved.
Maybe do this?
"I am a young software developer.
more coming soon..."
You're god damn right. Income? Who needs it? Do something awesome that you are passionate about. Everything else will flow from that.
This is my advice to you.
1) Unless it's handed to you, don't focus on freelance. You're young and inexperienced. Even if you have the best of intentions, if you take on a solo project, you're not even going to be aware of the mistakes you're making, and rather than learning from them and improving, you will likely turn bad practices into bad habits. Right now you need to learn. You need to find a small team that you can join as an intern or Jr. Developer. You need to be in an environment where people around you can accelerate your education. Forget pride. Forget expectations. Embrace the ability to learn and grow by making professional mistakes in an environment where others will point out those mistakes and the team will carry much of your weight while you gain experience.
2) When networking and interviewing, don't sell yourself on what you know. In the grand scheme, you don't know much, and you can't win by competing on something that you lack. When I hire Jr. Developers, I don't really care what they know or, on the surface, what they've done. I'm not hiring them for experience or knowledge. I'm hiring them for their passion and their thirst for knowledge. I'm making a gamble that the investment that I make into that person is going to pay back 10 times. What matters to me is how willing that person is to admit their weaknesses and to jump at the opportunity to learn. Market yourself accordingly. Focus on networking through whatever local meetups you can find. Ask (or beg) experienced developers in your area to meet you for coffee so that you can pick their brain or ask advice. Always be inquisitive. Do personal projects to challenge yourself. Find the things at the very edge of your ability or comprehension, and challenge yourself to find what lays just beyond. Repeat.
3) Show that you're committed. Many people disagree with the traditional education system, especially in CS. But, the one thing that it shows is that if you commit yourself to something that you will see it through. That said, I don't have a CS degree and a rarely give a shit about a degree for anyone I'm hiring, but, you need to find some way to demonstrate that commitment. As I said, I'm going to invest heavily into you. The last thing in the world that I want is someone that three months in suddenly feels like they no longer care, or, worse yet, are now beyond the role.
4) On areas where you are knowledgeable, speak your mind. No one wants to hire a limp fish. When I invest in helping you to grow, I'm going to look to you to help the next young developer grow. That requires someone that is willing to stick up for what they think is the right way to do a thing. But, this specific piece of advice comes with two important caveats. First, don't boastfully preach on areas where you are not informed. It's called bull-shitting, and those around you will know. And second, however strongly you hold a belief, always remember that as we grow our beliefs will evolve. Don't close yourself off from different ideas or opinions.
That's what I look for in an inexperienced developer.
If your career goal is software development, you can and should get relevant experience and a paycheck together. Only take an unrelated job (like the restaurants you mentioned) if that's the only way to stay fiscally/mentally healthy.
While you may be enough of a self-teacher and hustler to do a lot of remote/solo work to get by, at your career stage you really need to be working with a larger group of more-experienced people. (College-like programs are one way to achieve that, but interesting/competent/functional workplaces are, too.)
Your first, second, and third priority should be to be near and working-with people you can learn from. Research all such workplaces near you, and be willing to take any starting position someplace they're doing the kind of work you want to do. Any role can grow quickly once you're in the door.
Your age is less important than the fact you're "entry level" to the full-time workforce. Your lack of credentials can be largely offset by any prior work that shows promise, a good attitude, and acredible interest in filling any skills-gaps over time (with both on-job and off-job projects and education).
It's expected you'll learn on the job, you just want to send the signals that: (1) it won't be too long of a ramp-up before you're a net benefit to the employer; and (2) if a firm is patient with you, you're interested enough in their projects/business they'll have a chance of retaining you, when you're more-experienced.
Put as much information on major job sites like Monster, SimplyHired, Indeed, Dice,etc.. It's boring and if you don't have much to list, disheartening, but likely you'll get some recruiters calling you to try to fit you into whatever job de jour they have cooking that day. At least having someone calling though with minor interest helps boost confidence.
Apply to small local companies, don't bother with huge organizations(e.g. power companies, healthcare). If there is a long drawn out application process on their website, avoid it. Ensure you include a cover letter and customize it to include something about the company, and why you'd be excited to work for them(e.g. you like their product, and can see how it could make a difference in the world).
Get your GED. I think you're giving a poor excuse for why you don't have it. There are tons of places to take the GED test. Get it at least scheduled and go.
Even if you don't want to go through the typical education process, jobs won't just land in your lap. You're likely going to have to work just as hard(or harder) driving yourself towards personal improvement, as you would going through college. It's also extremely easy to become apathetic and let your life slip away when your goals are ambiguous. You need to become a specialist. A ton of people in my area are looking for AngularJS programmers. This is probably one of the top requested things recruiters were asking for. To really become a specialist though, you'd probably need at least a few months dedicated to making serious applications with AngularJS. The market could also fall out from under you as well, and suddenly your specialist skill isn't what people need anymore.
If you really need money, look for extremely low end jobs that have nothing to do with programming/tech and try to expand your role as the "tech guy" once you get there. Even putting something on your resume like "assisted co-workers with technical problems" and a few stories involving your problem solving skills in the work environment may get you noticed.
Go to user groups or tech meets in the area. Try to find out what people are working on, and make them aware you're available. Maybe you can pick up odd jobs.
Ultimately, if you really cannot find work and you are passionate about programming, swallow your pride, get loans and go to school(community college, then university). Even if you end up with 50 - 60K debt, you WILL be able to pay it off with a professional software developer salary. It's probably one of the most worthwhile investments you could make in yourself. Just make sure you network while in school, look for internships, apply for campus tech jobs, and develop a hearty list of personal and school projects.