It obviously has a completely different social, ethnic and economic diversity than SF does as well as being far far more cost effective. It also has real BBQ as well as being not that far from Miami (my favorite city but not good to live/work in).
I would recommend Boston (where I currently live) except that it has brutal weather, fairly caustic hospitality to new comers and is not that much cheaper. Its great for college kids but no so much for early 30 somethings hoping to own something some day.
If your are going to live in or near Boston I highly recommend Waltham, MA where I currently live. Waltham is not as cool as parts of Boston or Cambridge but its a hell of lot cheaper. Waltham has so many things to do. I can fish on the Charles in the afternoon, walk down the river and watch a movie in the local theater and then hit up the massive bar and restaurant scene all in the same city with out hopping on the T or car.
I ran some numbers comparing Seattle, Denver, and Minneapolis, and found the descending housing prices and ascending state income taxes more or less cancelled each other out in my situation. Of course everyone's circumstances are a little different, so this may not be true for everyone.
Seattle definitely seemed to have the best opportunities at the big players in tech outside of SF/SV.
"Vienna named world's top city for quality of life" - http://www.theguardian.com/business/2016/feb/23/vienna-named...
Our key reasons for coming here:
1. Cost of living. 2. No state income tax. 3. Laid-back culture. 4. Warm weather.*
* I feel required to add a qualifier to this bullet point, since so many people cite 100F summer days as a reason to not move here. I grew up in Miami, where it's humid to a fault, and 80 days there are about as uncomfortable as 100+ in Austin. The heat really isn't that bad.
We have a low cost of living, affordable housing (I bought my first house at 21 and I wasn't rich) and the weather is amazing.
If you ever check out Phoenix, I'm happy to show you around.
Edit: It's even an easy transition. We also call this the valley (of the sun)!
I was able to buy a house, on a lake, forest on all sides of me and I spent less than $200,000 to buy the house, move, furnish a new place and remodel a bit to my liking.
No startup scene here. For me, it was the slower pace of life, peace and quiet and more time to work on my personal goals.
I wouldn't say there's a lot of tech jobs, but there are some, and if you're working remote, it's a great place with a lot of 24/7 life.
Weather is nice and there are plenty of firms moving to the area. The only downside is that traffic is increasing, but there is enough sprawl it is not a huge issue. Startups are coming out of major universities and office space and co-work spaces abound. Aside from the hot months and increasing traffic, it is pretty great so far.
Toronto and Vancouver, despite having some pluses, unfortunately can't be recommended to anyone that cares about cost of housing.
Atlanta has a lot of opportunity, including in the tech space. It's no Seattle or SF, obviously, but it's a bit of a job oasis on the south. I also personally feel like the city has about 5x the culture and character of either Seattle or SF (where my wife lived for awhile), but that's probably a preference on type of culture than absolute value of culture.
I'll miss all the craft brews of the PNW, but can't wait to be back near the heartland of BBQ.
Bend has already been "discovered". However, there is still affordable housing and you can't beat the weather, beer scene and the outdoors here.
If you want to check it out, you can stay in my awesome big house when we are traveling: https://www.airbnb.com/rooms/7497695
Tech jobs are very easy to come by and the tech scene in Dallas has been steadily growing over the last 7+ years.
NYC is a great place to live (have done so), and I would pick it over Seattle (at least for a year or two) if you don't have kids, are young, and can afford it.
Chicago is great, less tech than NYC/Seattle, so I would set up a job before moving.
I would skip Denver, but I haven't spent as much time there. The city just felt uninteresting. I liked Boulder, but it is a small town.
That said you won't find startup jobs like SF, a lot of the top paying jobs like NYC are in finance.
We can all go there & start a new tech scene. How about Wyoming? Or Montana? Utah?
What I mean is we should go somewhere beautiful. Somewhere we can take walks outdoors in between coding sprints.
Why walks? It's been scientifically shown that walking helps you remember things better. Also sitting too long shortens your lifespan.
Just some thoughts.
I sometimes wonder, do people think that the rule is that you have to post an Ask HN, then you're not allowed to interact? Go ahead, interact!
For that matter, if you've got a similar question but you're not the OP, post your own answers to my questions and see what develops.
I just moved here 4 months ago and it's great. If you like hiking, national parks, outdoorsy stuff, Utah is almost unmatched for beauty and nice climate.
* Cost of living is low and quality of life is high.* People know how to have a good time and there's always something to do (sports are huge - Packers, Brewers, Bucks, college sports, etc).* Summer is AMAZING. There's an incredible number of festivals going on (with summerfest at the forefront).* Commutes are super short.* Lake Michigan is awesome.* Chicago is only 75 minutes away by train or car.* The startup scene is on the rise.
The downsides are:
* Cold winters (comparable to Boston with less snow but colder winds).* While not necessary, a car is desirable.* The tech scene is relatively small. (But growing!)
I've contemplated this before, and make a point to check out jobs in other cities when I'm job hunting, but it's hard to ignore the local recruiters who just send me local jobs out of the blue so I always end up staying where I am. I'm currently in LA, and am somewhat interested in relocating to somewhere with a similar/warmer climate, lower cost of housing, equivalent/better outdoor recreation opportunities, and not-awful startup/software scene. I've considered Denver, SLC, Bend, and Phoenix pretty strongly, but haven't found anything that lines up yet.
It makes a huge difference. I paid over 40% in tax in SF. Tons of tech people are doing it as they can more easily work remote and are already competing on a global stage. I've joined a share house of foreign tech workers who all doing the same thing for the same reasons. It is in one of the luxury apartment complexes.
* Note: Americans will still own the IRS money if they earn more than $100K. It's still worth doing. I'm not an American.
I don't know, maybe it's not for everyone, but I love it!
Cost of Living is ridiculously low, right by the ocean, big city amenities, due to the short summer tourist season.Great weather, inexpensive flights to Northeastern Cities. I outline some of this on the (now out of date) http://WhyNotTheBeach.com site.
There's no tech scene to speak of. So you have to be a remote worker to get the value. I maintain a list of remote job opportunities: http://LX.tc/positions
Interestingly it's growing organically due to people having their parents retire here. And then either needing to move here to take care of them, or just discovering the city when coming to visit.
Denver is more of a burgers and beer town from a culinary perspective, but it has lots of young people and downtown is very walkable. Also, unlike the bay area, they have a pretty functional transit system. You could totally live there without a car.
I've been trying to stay here because it took me forever (as an introvert) to build a strong social circle and those people support me a lot in my creative endeavors, so I'm disinclined to leave and have to start all over again elsewhere.
The food here is excellent, though. With the exception of seafood (which tastes fine, but not nearly as fresh as on the Bay), just about every cuisine you can think of has a quality representative or two nearby (even in the suburbs, where I live).
The suburbs also has plenty of forest preserves to explore, if you're into hiking and trees (which I am also).
Housing prices are reasonable, depending on where you look. You can get a good home for ~$200k-230k in the suburbs if you keep an eye on the market and you're quick to make an offer.
- Alaska: Pay you to stay, land is cheap, I like the cold. - PA: Land is cheap, I like the cold, next to Philadelphia - Poland: Everything is cheap: 1 z is 0.25 USD, great food and amazing nightlife. - India: 1 USD ~= 70 rupies, amazing food and culture
Edit: Forgot to mention Italy, but then you have to deal with the EU and VAT.
I would chose in order of preference- Quality of life factors (life is about living, not about working)- Cost to income ratio - How interesting the place is- Local job market- How accessible the place is (airline hubs rule, travel the world)
I'm happy to answer any questions regarding Miami, or @afontaine can as well. However I don't know if Miami is a good fit (I'm clearly biased)
We have a burgeoning food scene that gets better every year. Cost of living is pretty cheap, we have an NHL team (not to mention NCAA powerhouse OSU), new apartments are going up seemingly everywhere, and Amazon's building a data center here.
We can get a house 3x as large for 2/3 the cost and have a much better quality of life.
In fact, Denver recently ranked as the #1 Best Places to Live
Not a lot of good work or recreation, but you could buy a house for the same cost as a year's rent in SF.
If I was looking to keep costs down, I'd take a serious look at New Orleans. Obviously purchasing a house there might be riskier (since much of the city is below sea level), but they've got a burgeoning tech scene, lots of media companies, and the culture+food can't be beat.
An example, work in Chicago but reside in NW Indiana..guess what a house costs in NW Indiana? $250k and with rentals at $900 I am sure you can figure out that in a few years the house is paid for in cash and no mortgage to speak of...
I did my undergrad at Vanderbilt in Nashville, moved to Mountain View for two years to work at Google and moved back a year ago after realizing living in California didn't work for me.
Pros:- No state income tax in Tennessee- Tons of stuff to do. There's way more than just Honky Tonks and country music. Professional football and hockey teams and a decent minor league baseball team. People go to the symphony and see shows at TPAC regularly. The Frist usually has interesting art exhibits, as does Cheekwood (also a botanical garden). If you prefer to be outdoors, there are plenty of places to hike, climb, kayak, etc. It might not be quite as striking as Yosemite or Marin, but the nature here is still quite beautiful.- Housing is cheap (relatively). A lot of people (short and long timers) have taken to complaining about housing prices recently, and to be fair they have gone up quite a bit from where they were. It's not as cheap as Chattanooga or other smaller cities but it's still _very_ affordable compared to California. I recently closed on a house just using money I saved from working in CA for my down payment.- Growing tech scene. It's really night and day even from when I graduated 3 years ago. Tons of meet ups and the community is really awesome. A growing number of companies - and the companies here tend to be more focused on actually growing a business instead of just hitting a valuation.- Food. Awesome restaurant scene. Obviously more BBQ and Southern focused though.- Friendly. People in Nashville are very friendly. I think this is immediately noticeable, but I enjoy having conversations with random people I run into. - Centrally located. They've added direct flights to the Bay Area recently, and you're a day's drive from a good chunk of the eastern half of the country (you can get to Chicago, Oklahoma City, New Orleans, Orlando, or Buffalo within a day's drive).
Cons:- Davidson County schools aren't great. Lots of people with kids live in other counties and commute in to get better schools. - Traffic. This isn't as bad as other major metro areas, but depending on where you live it can be significant. - Not very walkable. There are a few areas that are walkable (12 South, Hillsboro, places in East Nashville) but you need a car. Public transit is pretty bad.
Neutral:- More conservative state politics. Nashville is fairly liberal, but there's definitely still a conservative bent at the state level. I put this in neutral because I don't think it's all bad (remember, no state income tax) but you may end up getting upset about state legislation.- Weather. Really hot summers. Winters aren't too bad. Occasional snow, and it can actually get chilly. Lots of rain (compared to CA). I don't think this is bad because I actually enjoy having seasons.- Big healthcare focus (both small and large companies).
tl;dr - Nashville is awesome, and I'm really happy I moved back. It's not as easy as the Bay Area to job hop, but I'm not worried about finding work when I do decide to make a jump.
Lots of tech jobs here, and the cost of living is very low (if you're paying more than $0.75 per square foot here, you're paying too much).
Right now, I'm selling to retail / real estate (http://www.retailwizard.co.uk / http://www.propertywizard.io) so to get customers I literally go to their workplace & ask them for 5 minutes of their time. I did try emailing as you know, but I have found going to speak to to them face-to-face to be more effective for my niche.
Obviously email works for other sectors, something I'm looking to explore again in the future.
Have you validated yet?
Set reminders (e.g. "remind me at 10pm to take out the garbage") Timers (countdowns for cooking) Call my partner/friends while my phone is in my pocket (via headphones) Wiki things/trivia (when someone says something or asks something that is esoteric) Set once-off alarms Find places
The two that come to mind are when cooking ("Hey Siri, set a timer for 15 minutes") or when I'm trying to get everything together for leaving the house ("Hey Siri, how cold is it outside?"). I'll also use it if my phone's in my pocket, I'm wearing headphones, and it's awkward to get my phone out ("Hey Siri, text Tom." "What do you want to say to Tom?" "I'm running 10 minutes late but will be there soon. Sorry!")
I bought a windows phone that was on special recently to test and found Cortanta surprisingly better to use than the OK Google version. If someone nails voice it will be a significant decision making variable in my OS choice. It feel like both MS and Google are close but they need a new 'Steve Jobs' than has that last level of attention to detail and making it work in a practical environment. It feels to me it's more this lack of thinking through the UX is the bigger issue than the technology capability right now. I envy anyone working on this as it will be super interesting getting this right over coming years.
"Ok Google, will it rain today?" - This I use pretty regularly while I'm getting ready in the morning.
Personally hacked together functionality!
"Ok Google, turn the bedroom light on."
"Ok Google, turn all lights off."
"Ok Google, turn (?:the )?(?<loc>.+) lights? (?<state>.+)" Tasker-flavored regular expression.
Controls the relevant Hue lights in my apartment using Tasker + AutoVoice + Hue Pro Tasker.
I occasionally tinker and extend my hacked together Tasker functionality during my morning commute.
I never use the "Ok Google" functionality in public, only in the privacy of my own home.
I look up my team's score, occasionally. Unfortunately that team is Sunderland so it's rarely a happy outcome.
"Remind me to do x when I get home" is another good one.
I walk around a bit, eg. walking to work, and I don't have a fancy Apple Watch, so instead I have setup an Activator action to ask Siri the time when I hold in the Apple earbud pause/play button.
Pretty simple but it saves me from taking the phone out of my pocket to look at the time
Call my wife. Where is my wife? Call my brother on Facetime audio. What is the weather today? Wake me up at 7. Remind me about bills when I get home. Get directions to <place>
Apple's speech recognition is very good. I use it as speech-to-text all the time in iMessage. I save a lot of time by speaking rather than by typing. It's more than 95% accurate for that purpose.
The Siri AI is very hit-or-miss. Sure it's great for finding out the latest football score. But if it winds up only being 50% responsive in general (and that's what it was for me), then it's not worth the trouble.
Once a person gives up on Siri, then it could take years before they make the effort to use it again. That's probably the current situation for a lot of people. That's where I'm at.
Edit: forgot to mention that i use a staccato voice for the voice recognition. Short pauses between words. It drives my kids crazy hearing it when they're in the same room, but it really improves the hit rate.
From a personal point of view, Sometimes I would just email myself a link to a webpage if I wanted to view it later on mobile or vice versa.
In technical support over email, I used to send customers a link to a kb article or a pdf and a page number. I never had to go beyond something along the lines of, here is a link, you forgot to do step 4 or follow the instructions under the known resolution section.
From a bug reporting point of view, Most people would send a picture and send the dropbox link over slack/email.Dropbox has a little popup with the link to the image after taking a screenshot so it is very easy and fast.
It reminds me of Onenote and Evernote feature to copy snippets from a webpage, though I never tried to share the content.
While not directly similar, The code for searching for specific parts of a webpage seems similar to some web scraping solutions. Ie, here is a webpage, I want to scrape this selection for all similar pages,etc.
For Java, you could learn C++ (via JNI) for the same reasons - but Java is less likely to use C libraries, and going from Java to C++ usually doesn't produce as much of a speedup as going from Python to C.
Go is not a great choice, because it's not very low level. You don't allocate and free memory explicitly, and you often work with maps, slices, and channels, which are quite high-level.
C is a reasonable choice, since the core of it is fairly simple. I expect that forty years of incremental additions have added quite a bit of cruft though, which you have to be able to see though. There also isn't very much work done in plain C these days. Most people in this space use C++, which is even more complicated.
May I ask what you are hoping to do with this skill? If you just want a chance to learn more about how computers work, an artificial assembly language like MMIX may teach you more while avoiding much of the cruft that real languages pick up as they evolve. If you actually want to use this for work, C++ is the way to go, but expect to be a beginner for a long time.
If you don't need a language that's as low-level as possible, then Go is also a good language to learn. It doesn't have much to teach in the way of memory management, but it does have pointers.
C++ and Rust are both relatively complex. If you have aspirations to working on large native projects, then C++ might be the way, with Rust becoming more prevalent in the future.
From my experience with learning Rust, it might be a little hard to grasp both "the low level world" and Rust-specific things at once.
I would really recommend learning to program in assembler. And I think the best way to do that is something like AVR  or ARM on an embedded device but X86 is do-able with NASM  
There's always MIPS via SPIM 
Learning assembler will give you more than simply swapping one imperative language for another. Python / Java -> C / Go / Rust is really not that large a leap. You will have the basics down in a few evenings.
Fair warning, as i wish someone had told me exactly this when i got my own TN-1: Any given border agent has the power to repeal said visa for any reason, without oversight. If they have a bad day at the border, they may elect, at any time, to permanently repeal it.
The main issue you'll have is resume screening -- so try to network to a job instead (or have a very compelling programming job application that makes your unrelated BA make you look well-rounded.)
There are also remote jobs in the US. Most would probably hire from Canada.
I was able to obtain TN status at the time through the Sci/Tech category. It was a little bit different then the traditional Analyst category but it worked.
Does what I need, and their google-drive integration makes it easy to keep track of the diagrams and share them with folks.
So rather than posting to Show HN, Reddit, or random internet friends, make a list of 10 people who you could consider potential users and email them asking for feedback. Then for any/all that respond, given them a small reward from iTunes, Amazon, etc.
It does something, but I don't know what let alone how well unless you tell me what it is supposed to do and why it is supposed to do it. I mean, I know there's a design vector under which I am simply not supposed to "get it," but I have no basis for evaluating it against a user story of someone who is supposed to "get it."
As others have said, the best feedback would be from people who are supposed to "get it". Absent that though, feedback requires an explanation...a blog or a comment or a link at the bottom of the page.
If you're looking for feedback from a marketing perspective, as in, how are my customers likely to respond to this, how likely are they to buy something, then we run a free weekly marketing clinic over at http://paulmontreal.com
You can apply here http://paulmontreal.com/apply
Don't think for a second that I am joking I'm dead serious.
In general most programming requires middle school levels of maths if that. A lot of maths knowledge higher than that is similar to programming, but learning the maths itself doesn't really make your code better in and of itself.
That being said there are specific jobs that require much much higher levels of maths in particular statistics, physics, and similar. But the vast majority of programming jobs are just business-information which requires near to none.
I don't use any non-trivial maths day to day and haven't since the start of my career. But I don't work in the science/economics/games development fields, I work in one of the many "boring" programming jobs. We are the silent majority.
But overall, I'd say that taking a formal logic class (usually part of the Philosophy Dept at most colleges), will be the most bang-for-your-buck.
In truth, computer programs and problem solving don't require deep mathematical knowledge, but it helps.
Add trigonometry and potentially calculus for 3D graphics, game development, and high finance quant stuff.
Here's an old rant by Shaw on the importance of statistics for programming - http://zedshaw.com/archive/programmers-need-to-learn-statist... .
Beyond those two, it depends very much on the type of programming you do.
The gross annual amount of an employee's base salary is very different than the cost of hiring an employee with said base salary. I know CA != US, but payroll taxes, benefits, retirement contributions, unemployment and disability insurance, etc can't be that alien of a concept. Or is it? In the US estimate 130%-160% of the salary for base employment. Or is circa 30k for an intermediate engineer normal in Vancouver? In which case what would the entry level position make?
I wasted probably six months going down blind alleys with this approach. Here are some of the lessons I learned:
1) A small group of beta testers will not give your product the time and attention you need to find product-market fit.
2) High quality collaborators, willing to devote all their spare waking hours to your vision, are extremely hard to find (and even harder to get up-to-speed). Especially on a budget. You'll probably see several promising co-founders come and go before you find a good match.
3) Even if you have a really sexy MVP and a great team, it's nearly impossible to fundraise until you can point to a handful of satisfied early customers. You might think you can raise $100k (chump change!) to fund your first six months of operations, but you're probably wrong about that.
The only thing you should be doing right now is getting your product into as many customers' hands as possible. In your post, you say you plan to "charge money and earn revenue from day 1".
Today is day 1. Go get some customers!
Read "The Lean Startup":
If someone told me that they will make $1mio in sales on a $156k investment, and they wanted that investment from me (not just do it themselves), I would think it was some kind of scam.
...Apple makes really great hardware and good software, but would you expect them to make the best social site in the world? Maybe, if they really put their minds to it they could, but it's just not part of who they are. For instance, they have one of the world's biggest captive audiences in their suite of music software, but can't add basic 1.0 features and interactions to their repetitive attempts to make a music social network inside of iTunes. It's not even funny anymore, just really sad.
...Google is very smart at algorithms and dealing with massive scale, but would you similarly expect a bunch of smart nerds to build the best possible platform for sharing or rating stuff with your friends? What limited social success they've had with YouTube they've had to just buy, and even this they almost screwed up with their ridiculous abortion of a Google Plus integration.
It's not that these companies don't have talented people inside who are capable, just there's probably a lot of corporate momentum and interference from managers on top who dictate that things need to be done a certain way.
Let that be a lesson on dogfooding.
But it didn't fail, exactly. It got sunset, rolled up in what I would guess was a collective organized push to build a single social sign on. And arguably some of the lessons were applied to Google+, where circles can be seen as a way to deal with buzz's privacy protection drama.
The truth is Google keeps trying to pull users away from their gmail and google docs with hangouts and google+ and google photos into a second tab, when what people really want is a SPA that handles it all inside Gmail.
Facebook is trying to do something of the same with Messenger and mobile.
But honestly, Google could probably, at any point, deal Slack and Hipchat a huge blow by sticking channels and channel management features in Google Apps for Business, maybe adding some optional google wave magic or contextual ad inclusion (you mention Twilio or Mandrill, it shows an ad for a similar company). So Buzz may rise again in some form, perhaps less influenced by blog posts and more by RT chat.
But I'm not a part of Google, and I'm just talking. I don't know him, but I'm going to reach out to the former Google Buzz PM and ask if he'll respond here.
It was used extensively internally to Google prior to launch, and worked great. I am slightly disappointed it did not get rolled out as an enterprise product.
I've seen it claimed that Couchbase should be on this list, but I've never seen a primary source which verifies that they were rejected from YC.
 - https://blog.blockcypher.com/what-adam-saw-that-sam-didnt-a0...
 - https://pando.com/2013/10/11/superhero-laundry-founders-laun...
EDIT - Citations
They were prepivot (Kindrid Prints) and YC didn't like their idea
If I could do it over again, after graduating with a CS degree I would explore either going to Wall St to grind and retire after 5-10 years, go to a top 10 law school grind for 10 years and retire, go to medical school. Hell, I'd even just do a DO school in the carribean. Sure you get crapped on for your residency, but after that it only gets better and you don't have shelf life.
Upside: Now I know many of the "under the hood" implementation things
I got into a funk and one day started learning a framework and it changed my life. I could use what I learned to build on top of the framework and quickly get webapps running that people could actually use.
I regret that I was stubborn and wanted to "learn it the hard way." If I could do it over, I would go through a book on a particular programming language to learn the ins and outs, and then quickly apply that knowledge to a framework. Much better positive feedback loop being able to see the fruits of my learning come together into something practical and actually useful rather than little programs that lived on my local machine and didn't do too much.
It's much more fun and less tedious to built out my own apps on the structure of people who came before me. GOod recent example: Building an app and wanted people to be able to drag and drop to upload files into their browser. Old me would have spent a month learning how to implement this in JS from scratch, new me just uses the DropZone JS library to make this happen and then I can focus on what I really want the app to do.
Not sure if any of what I'm saying makes sense to anyone but me.
I know if I continue programming as my employment until I'm an old man without trying other pursuits, I will definitely regret it.
I'm 26, and I wrote my first line of code when I was 13 or 14 years old, and perhaps the only sub-fields of programming where I didn't dabble in substantially are assembly and prolog. These days I feel like, with programming, I've seen it all before. C, C++, Python, Objective-C, node.js, Lua, Lisp, Haskell, GPU computation, Django, REST API, React, Angular, Django, graphics programming, mobile apps, iOS, Android.
I've spent time with each of them, most of them in a hobby and commercial capacity and these days everything seems a bit too familiar. I know there's a lot of people who have way more expertise than I do, however, I think it would do me good to get some space. My body is giving me hints I can't continue in the same way I have for the past ten years - I feel my legs getting weaker by the day, random points of tingly pain in my finger tips that comes and goes. I find I really like looking at trees and feeling the wind in my face. I would love to do a lot less sitting and a lot more moving, as in quitting programming as employment completely, starting within 9 to 12 months.
The idea of testing code was never covered in any of the introductory books I read. I learned the basics of C, Fortran, and Pascal while doing a physics undergrad in the 90's, then I learned Java and Python in the 00's on my own from books and websites. None of the introductory books I read introduced the concept of testing. It wasn't until I started reading programming blogs on a regular basis that I started writing tests for my code. Once I did, the quality of my code immediately improved and I felt much more confident in the code I wrote.
When I wrote an introductory Python text recently I included a chapter on the most basic aspects of testing. Beginners don't need to write tests for everything they write, but they should definitely be aware of the concept.
I should have learnt more of following (a) memory management, (b) process memory layout, (c) good coding practices (d) read up code from other projects. There are really brilliant programmers out there churning out awesome code and that itself is a great teacher. (e) Teaching whatever I learn. Teaching (especially writing it down on paper/webpage) brought clarity to me.
Not doing all of the above early in my career is a regret I have now.
I try to avoid it and over time I've done a better job of approaching things dynamically.
This should be done sooner rather than later.
I teach community college and sometimes I wonder about the thought processes behind some of my students' papers. Paul Graham linked an essay he wrote in Stypi, where you could watch him write it in real time. This was clearly the greatest computer-assisted tool for teaching writing ever, and I immediately incorporated Stypi into one of my writing assignments. I wanted to know how much my students proofread, how they structured essays, and what they struggled with as they wrote. I was so excited about it that I wrote the entire assignment in Stypi and linked my students to the replay in case they were interested.
It was a disaster. So many students lost essays in browser crashes or were flat out unable to use the software. I ultimately had to apologize to my class, give everyone an extension, and cut Stypi out of the project.
Apparently they were acquired though, so I guess they made someone happy.
I did a quick check using Mattermark data of which YC companies got the most news since 2013 that are not still alive. It yielded (num articles / startup):67Homejoy13Tipjoy13Buttercoin6Tutorspree
Rails is 'immune' in the sense that it doesn't let you directly drop HTML onto pages from strings without escaping it first, and if you would like to do so, you have to explicitly mark the string as safe. This isn't to say that XSS is no longer an issue though, Rails and other frameworks help prevent these occurrences in many cases in simple applications, but larger scale applications have a lot more code and a lot more ways to punch holes in that protection. In fact using Express with with Node.js doesn't sanitize your strings by default (as far as my quick research has shown), which leaves a potential attack vector.
While XSS is a very well known vector, XSS attacks are not uncommon in non-boilerplate web applications. Fortunately sanitization is easy and bugs can often be fixed quickly.
Browsers can prevent some methods of XSS, such as by preventing loading JS from a remote untrusted source. If you find a way to drop JS directly onto a page that the browser can't catch (such as the entire JS source being delivered by the server), there's still vulnerability.
OWASP tends to be the place to go to learn about web security. They have lots of examples of potential exploits.
 https://www.google.ca/about/appsecurity/reward-program/ http://stackoverflow.com/a/3932440 https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
We did make one change to Arc proper: we added syntax for binding thread-local variables in function signatures, analogous to how optional arguments are declared. This adds a limited kind of dynamic scoping to Arc. That is useful when you have some 'top level' state (e.g. the basic parameters involved in making an HN web request: username, item id, etc.) that you'd like not to have to pass down every chain of function calls that's going to need it at some point. We originally added this as an experiment to see whether it would simplify or complicate the code. It simplified it very nicely, so we kept it. I can describe this in more detail later if anyone's interested.
You can use websockets to broadcast/listen for changed data and updated the DOM accordingly (if you're on the web).
a) simple laziness. A good review takes time and thought to write, and the time isn't necessarily in the writing the review, but in processing the experience after graduation. By the time you have a more balanced (ie, graduated, employed/unemployed) perspective, you've probably moved on to other things.
b) in my case, it's mostly due to general ambivalence about the experience. There were things I liked, things I thought weren't done well, and the overall effect is to cancel each other out. Ambivalence doesn't encourage taking the time (see above) to write down thoughts the way more extreme positive or negative views do.
c) also specific to me: I genuinely liked the instructors and most of my cohort, and writing anything negative seems impolite - not wanting to hurt someone's feelings or seem ungrateful. Irrational, but there ya go.
I imagine many people go into these programs to gain skills to get a job. If afterwards you talk about how the program failed to prepare you for that you're shooting yourself in the foot.
As to why there aren't more positive reviews - maybe it's related?
If you review a bootcamp, you risk a permanent association with having attended a bootcamp.
It lead to several sites emailing me and asking me to write a review or to link to their sites. Here is what I wrote to coursereport:
>By completely ignoring the issue of student outcomes, your resource does prospective students a disservice. How about listing average salaries, listing graduation rates, linking to yelp profiles and linking to student directories for those schools confident enough in their outcomes to share them?
I hadn't looked at any of these sites in a long time, but to the best of my knowledge, very little has changed. They offer a comparison only of the costs of the various options, not the value. The person who emailed me did seem to express some vague interest in adding that kind of information later but two years later it's still not there.
At least for me, the main reason I avoided the "bootcamp review" sites is that I didn't feel any would have given me useful guidance as a prospect (whereas Quora, Yelp and HN threads would have if they'd been around when I applied).
FWIW: I did a bootcamp, loved it, never wrote a review. Just laziness/generally don't write reviews for things. I would guess many people don't write reviews for the same reason.
By that I mean the entry point for most participants are all different, the expectations for most participants are all different, the experience for most participants are all different (some students work harder than others), and the outcomes are all different.
I felt there was more to learn than there was time (I did a 12 week course), so how I felt after graduating was largely a reflection of my own confidence and ability in contrast to the effort I put in and not a direct reflection of the quality of the instruction.
The Dreyfus model of skill acquisition  is a useful reference here. Any program that claims you will gain mastery over a discipline in a dozen weeks is lying to you. The guys that ran my bootcamp were plain about that. They said they would help me help myself learn... which they did but not to the level I really wanted to get to. And that more than anything is why I am ambivalent about recommending them.
And sure, I'll freely cop to self-interest here. Bootcamp grads get enough shit from people in tech who want to dick-measure. I'm not going to do anything to further the cause of people who already think I'm an incompetent chimp with a keyboard.
Also, like the SwitchUp person already said in this thread, there's no reliable source of data for outcomes. I can tell you how long it took to get a job and what I made fresh out of the course, but why would you believe me, especially if you're already primed, like a bunch of people here clearly are, to believe that bootcamps are bullshit and their grads are rubes desperate to cover up the fact they got bilked? Maybe I'm just a plant; maybe I get paid a combined $200k a year by DBC/GA/HR/Flatiron to fire up 100 sockpuppets and argue that bootcamps are a good investment to con people on Reddit/HR/wherever. (That actually sounds like a super fun, super immoral job. Maybe I can trick them into actually paying me to do that. OR MAYBE I AM STILL MESSING WITH YOU. ~spirit fingers~)
Provide ratings and info to the general public that don't just show rates, but trends, who drops out, comparisons of success rates for different groups, etc. Provide more structured but still anonymous feedback, for a price, to bootcamps as a consultant, or get a grant from a large tech firm. Publish papers in conjunction with academia on a delay.
I think what bootcamps could do, if they were willing to, is be much more agile in changing how they work based on research then a 4 year school, and actually do research and experiments to find better ways of teaching, and improve the industry as a whole.
My friend did a local bootcamp and now he's doing ASP.NET work and loves it! I'm just scared of doing that specific one because I don't really have interest in anything microsoft.
He has a friend at another big-4 in NY, also a cloud architect, he is making $400k
I think that the $1 million package is incorrectly calculated. This is perhaps the total package for 2-3 years, including signing bonus (vested over a couple of years) and RSUs (vested over a couple of years)
Annual total compensation for any big-4 Sr software engineer with a lot of experience in SF I assume is around $300k and can get up to $500k if you are really good.
I don't know of anyone who is making $1 million a year, even senior directors at big-4s. Perhaps if you are a Phd who worked at Google cloud / AWS / Azure for 5 years, wrote their software, talk at cloud conferences, wrote "Cloud computing for experts" type of books and published a seminal paper on distributed computing, then perhaps you will get a total compensation nearing that.
If you are just a cloud architect at a big-4 I think the lower part makes sense in total comp, the upper bound sounds completely ridiculous. I have friends who got offers from Amazon and Google for very, very senior cloud positions, way more than "just a cloud engineer", and the total comp is around $300-$400. If the stock goes up though, then the RSUs might be worth much more.
If LinkedIn / Facebook are offering engineers an annual $1 million I'll be very surprised.
Making 300k+ in total comp is pretty easy at the big Tech companies. Most level 5 Software Engineers make around that and there are >10 thousand of L5 SWEs at just Google; and I don't think Facebook, Microsoft etc pay any less. This might change if there is a downturn and these companies stop giving out significant annual stock refreshers since the base salary part of the 300k is only about 140-170k. But as of now, the numbers are"normal". To reach the close to 1 million level, you need to be at least a level 7, and there are very few of such.
Now salary is a different matter. A 300k+ salary is very rare, and you probably need to be a director at least to command that. As you rise up the ranks, salary goes up at a much smaller rate than the annual stock grants/bonuses.
I can disclose that, in a recent past job as VP in a tech company, I had a very generous package which was a bit above $0.5M, all included (base, bonuses, options and RSUs) - then the stock went down (options became worth nothing, stock lost more than half its value), and the actual annual comp went down by about $70k-80k.
I am sharing this here to benefit the discussion, please do not make a big thing out of it.
I know it's a ton of money, but I'm pretty sure that most purely technical jobs don't surpass 300k-350k. 1M is simply foolish.
Furthermore, if you consider income taxes, and the cost of living in SF, the number is still high but not as nice as it seems at first.
Netflix, however, consistently pays way more than any other company in the valley - and yet, it is still an exception.
He describes a boundary around $250k at "senior", and to get above it you'd need to become some kind of principal/lead.
Also, any key hire like a scientist/data analyst/PhD working in a big company would easily get $1 million offers from other big companies.
You won't get that sort of offer at an illiquid startup (except as un-valuable options) - but it's certainly within the ballpark of reason for people hiring experienced engineers at highly profitable companies.
at this point I do not believe this unless you are the lead architect.
for exaple this job posting I cannot see payin more than $165,000 in dc/ny/bay areas... but maybe my previous exposure to the big four has been limited... was anyone able to find a job posting that pays this much?
to throw around some figures too.
I've heard of SALES ENGINEERS making that kind of money, but not technicians.
The moment a programmer is working at home remote making $300K per year, the employer will find some offshore person to do it at 10% of that price.
Reference Disney and the H1B debacle etc.
The only way somebody as a technician is making that much money is the company they work for hasn;t found a way to get rid of them yet and replace them with cheaper options.
They can find themselves out of a job very fast at that price range.
Once you do the initial setup and things are stable(documented), they will kick you to the curb and replace with $50K worker.
This sprint sounds like a great way to force constraint on yourself. Make sure you're using that constraint. Don't work on this like you would any other project. You need to be fully aware of the deadline, and constrain features within it.
If you're making an SaaS, the the first thing you should do is setup payments. That will give you confidence that this sprint can actually result in some real revenue. Then, you can build out the features.
Also, don't experiment with any new technologies. Use only what you know, and prefer shitty spaghetti code over well-architected solutions. Just get this shit out the door.
It doesn't matter what kind of project, always include one more week.
Don't be upset if you can't stick to your plan, allow yourself an extra week.
It's not your fault, that's basically software engineerings nature.
You should get out daily, for at least 1 hour.Simply because that one hour is for recharging your brain, which again leads to better performance.
Also what I try to do, when I'm doing a hackathon, is that I'm looking for templates from themeforest or wrapbootstrap.
There are also a lot of good templates for your framework, where auth/register/signup/signin/roles etc. is already done for you.
I don't like reinventing the wheel, I'd rather focus on the business logic.
Also, don't obsess about making the code and architecture good. Get it working to prove the idea works then using what you've learned you can go back and improve it. I see so many side projects fail because many coders obsess about making code perfect over more important things. Releasing a project with imperfect code is vastly better to never releasing anything because you procrastinated trying to write perfect code in my opinion.
- Have a clear goal about what you're building. If you don't know where you're headed, you'll end up getting lost.
- Start the research NOW. It takes quite abit of context switching between research and dev. The sooner you get a clear view of how to build it, the better.
- Use tools, frameworks, other people's code, etc. but consider the learning consequences.
- Layout daily goals and your roadmap for all your features. Put it in your calendar
2- Work in 25-5 bursts. What that means is that you cut yourself completely from any disturbance, which include your phone, emails, social media, family members... for 25 minutes, that you dedicate completely for work. Then take a 5min rest. Its very effective and something that i do myself.
3-Hire a frontend developer or buy a ready made theme to only focus on the backend stuff. Since UI is very important.
Good luck with your project mate!
Also, I have found that at work it is ok if you get sidetracked sometimes because your guilt or sense of responsibility to your coworkers and company will refocus you soon enough. If you are like me, then you have no such thing when working on your own thing. For that reason, I highly recommend keeping regular, well defined work hours. I would even consider one of those apps that won't let you connect to FB, etc. while you work.
As far as technology goes, you can build a solid prototype website in anything these days. Pick the language you know best and also pick a solid foundation. By that I mean do as little as necessary to make the prototype work. Don't fall into the trap of using this as an excuse to try something new (if you want to actually get it done that is). Frameworks are great for this for example.
In the end, I hope you'll become a successful technical CEO and great company because you've learned a lot more than an API or two.
Lay out the entire 20ish blocks and post them here/email to your friends and family or to some other entrepreneurs that you do not want to dissapoint by not getting stuff done.
Every day, update the post/email with a status, did you get the blocks done and if not why not, what did you learn and what will you do differently tomorrow?
You should work each day like you're going back to the office in 2 days.
I did that once, a long time ago, and it took me on an amazing adventure.
check out http://7daystartup.com/ as well. dan occasionally throws a 7 day startup challenge where a bunch of entrepreneurs gather online and start a business in a week
* The community is great.
* Documentation is amazing, and up to date.
* Examples actually work.
* Installation is simple. Runs on multiple platforms.
* Clustering is easy. Sharding is easy. Management is easy.
* Built for today's needs, not for what we were doing 30 years ago.
If you haven't yet taken a look at RethinkDB, do yourself a favor and spend a couple hours dinking around with it. You may just be impressed.
*  http://rethinkdb.com/
Oh yeah, and something that is a cross between SPARQL and SQL 1999.
It's free, it's simple and works in multiple platforms: Web, Android, iOS.
It supports tags, attaching images and, archiving notes, so you can keep your list clear.
I mostly use a note per idea. Before, when I used a txt/spreadsheet, I mostly had a 1 line per idea kind of organization, but it became impractical when my mind started going back to the same ideas with more thoughts.
* it failed on me when it had some sync issues..
Now I keep a top-10 list only, in an evernote file. If I want to add something to the list, I have to delete something else. And the next time I have spare time to build something, I'll just have 10 good options to choose from, instead of a thousand terrible ones.
Ideally, I should have placed the file under version control from the start so I could reference when a particular idea came to mind, but I didn't do that.
My actual project planning docs are all text files though, and those actually are under version control. I find using a blank commit message works best because it lowers the barrier to further editing or writing.
You type in plain text (just like I'm doing here in this comments box) and jot down notes. Save it an ongoing text file (probably called 'ideas.txt' or you could separate them into 'personal_ideas.txt' and 'business_ideas.txt' and 'new_relationship_ideas.txt' (lol) if you need, and place all that 'org' stuff in a folder that auto-syncs to some service somewhere if you need cloud backup (dropbox, iCloud, gdocs, etc).
Standard iOS Notes app is fine if you are all in the Mac/iOS space routinely.
The only thing I do in terms of 'formatting' is to put bigger ideas in all caps and then indent (it's a tab!) for sub-notes and maybe put an asterisk if I'm feeling bulletproof.
So, like this:
* increase Twitter to 180 characters* publish corporate drone-like rants on LinkedIn* command-line movie time tool* dog walking service combined with GoPro/Vine channel for owners to watch 'best of' clips* invent a new "to-do" app and try to monetize it since text files haven't worked in 30 years* See if WordStar is for sale and revamp it for the Mac with lots of shiny glossy new icons* MOSQUITO FARM order breeds online build security fence to hide farm from nosy neighbors what about a super-mosquito cross-bred with a hornet? sell to labs who need well-trained mosquitoes for zika testing* refurbish old consignment shop as an "eBay shop"* frozen yogurt, but only for pre-teen girls in a "safe" environment (no boys allowed) and only in girl-like colors, but where we teach them coding, laser tag, and play songs from the movie 'Frozen' all day long. Name: Frozen Yog-Her? * record online python coding tutorial for beginners since there is not much available now
Easy to sync between the two using plaintext files in a Dropbox folder. About as lightweight and easy to search for simple notes (whie still working on both desktop and mobile) as I've found.
Caveats: not great for longer notes, and keeps things super simpleso mostly great for collecting ideas.
I keep stuff here that I add to frequently; other things I typically move elsewhere to organize / editI love Scrivener for this but also use Google Docs for certain things.
I always tell myself I should document them on a Trello board then I can add notes to each idea when I think of things.
Depending on the folders, I visit them once every month or so, or almost never. It just depends what I'm into at the time, but I can always get them later.
When it comes to afk, I usually use evernote, but just as a basic notetaker that I can type up later.
I revisit old files at odd intervals. I have ~5 years worth of notes. What I love most is when I think I have a new idea, or stumbled upon original inspiration, and I find an almost exact sentiment mirrored years ago, albeit using different language. Then I know I've revealed some deep truth that will remain constant for me, and it is only my manner of expressing it that has evolved!
Yesterday I just finished putting all my family cooking recipes into a single JSON file so they'll easier to digest. This morning I started on compiling all my notes to a single JSON file too, adding summaries, detailed explanations, tags, and categories. After I'm done I plan on making a nice Webapp to add, search, and view entries.
When using 'clip to Evernote' browser extensions to add research materials you add same tags and then you have nicely linked together idea + research material.
I used to use index cards for storing ideas, but if you move often or just away from them - they are not so useful.
Hassle of digitizing notes are compensated by better availability.
For quick notes on a move I may use voice memo or voice note and then type in when I'm at the computer.
Also, have another column for things to read. Things to research/investigate.
Organizing can come later once I refine the ideas.
The most important thing I have to keep in mind here is to include terms that are good for search (not too generic, otherwise they bring up too many results).
I also include little icons that represent the category so I can visually browse and filter pretty quickly and easily as I scroll through it.
Recently I've been experimenting with markdown documents in a git/hg repo. I haven't quite found an iOS vcs+markdown editor I'm happy with though, so it's not a full migration from notes.app
Simplenote mainly because I never found a satisfying way to sync my txt files across all devices
It's also easy to sync and access on all devices.
I email myself. A movie recommendation to a really really good idea.
Simplify and reduce.
I used to do surgical AR. The immediate-now-future is nanodevices, rDNA pharma / gene therapy, and more exotic chemistry. Hardware and software only play a supporting role and smaller role in the final clinically approved therapy. No matter your background all require organic, molecular and various biochemistry or medical skills - probably not as much mechanical engineering as you hope now that CRISPR is here.
I'd love to work on something like this too!
I tend to push at the first opportunity it makes sense for other people to see my code, and then push again whenever I make enough incremental progress towards the feature to share. Our team has a culture of opening "in progress" PRs early and often to get feedback before we are too far along. This is great to share ideas and feedback about how things should work (instead of just about how they do based on implementation). It also helps keep the final code review size / time down.
If you just updated a typo in some comments, it could make sense to commit it and it could take 30 seconds.
Now if you are always committing as frequently, either you are working on very easy tasks with no dependencies, either there is an issue.
Here's the code in case you wanted to use it:
if git diff --exit-code --quiet then echo "There are no changes to save, NONE!"; else echo "Stage everything for commit -------------"; addit; # an alias for "git add -A ." echo "Commit all changes with message $@ --------------"; commit "$@"; #commit is an alias for "git commit -m" echo "Push branch to remote --------------" psh; # an alias for git push origin $(git branch | grep "*" | sed "s/* //") fi
Use it like this: savework "COMMIT MESSAGE HERE"
But seriously, I commit regularly, and rebase locally before pushing, whenever possible.
It's not really about how often you commit, it's about documenting that commit as a single unit of work so looking at it it's clear what you did, and why. This often requires planning ahead of time, and even possibly creating a separate branch just for off topic commits that you think of while working on the same file.
I'm not perfect though, it's okay not to be perfect.
Recipe for disaster. :p
> knew people who pushed / committed like every 30 seconds
Pushing and committing is completely different actions in the git world.
If it's a simple fix then I try to commit and push almost instantly. If it is a large piece of work that needs several days, then I "checkpoint" it by committing at least once/day.
But I try to never checkpoint by committing something that breaks the build or unit tests. Like if my work is rewriting module A to B, then my first commit would be to add module B, second to change all dependencies from A to B and lastly to delete module A from the repo.
Working on something that will take a week to be atomically complete and testable? (For instance, a major refactoring.) I'll write myself a checklist of steps and commit every time I complete a step.
As someone else said, once every 30 sec is too often, and once a day is too infrequent if you're coding 8 hours a day. When I'm in a rhythm I'll typically go anywhere from 10 min to 2 hours between non-trivial (e.g. typo-fix) commits.
I do not push every commit immediately. Once a day is a good minimum as a backup strategy and if you want to make sure you can work on the codebase from elsewhere or if you have a CI system to warn you of merge conflicts.
I'll also push whenever I complete a ticket (for long-running branches we typically have sub-tickets, or I'll push when I've completed work that someone I'm sharing the branch with can build on.) Git makes it easy to develop those units of work on separate branches, and when you merge them back to the feature branch is generally a good time to push.
In general, I try to be very atomic. As an added benefit, this makes it simpler for someone doing a git bisect later.
Fixing minor typos or copy changes across a few files could result in several commits within 15 minutes.
Working on a major feature that requires research and definition and a lot of conversation or feedback, might mean a few commits over the span of a few days.
Using this model I do work in progress commits as needed for different features using many different branches. Those wips and committed locally and are pushed to the remote fork many times per day for backup. For example I can do a quick push before going to lunch or meeting. I can also fetch, rebase, squash, and force push commits as desired because the only history I am affecting is on my own fork. The final merge to the "main" repository is usually 1-2 commits squashed from all the wip commits. Once that is merged I, since I am usually working on a feature branch, I can delete that branch locally and in the remote fork.
Every 30 seconds seems like a bit much, but it wouldn't be unreasonable to say I commit and push 10x a day.
I'm not sure there's a generalizable pattern there for which has a lower actual time interval between commit/pushes but I suspect that I tend to be spammier with them in personal projects.
30 seconds is too often. Once a day isn't often enough.
I agree with that but i'd add that i'll also commit at any stopping point. Need to leave for work? Commit. Need to go home ? commit. Doesn't matter how broken the code is at that point. I'll rebase the ugly commit away. Usually the ugly commit will have a message like "INTERIM COMMIT - REBASE ME"
I'll also happily push these ugly commits to a topic branch on a remote machine for backup purposes as long as I know that no-one else is working on that branch.
I push whenever I'm about to shutdown the laptop or by the end of they day.
I prefer this over trying to get every commit right the first time. I also feel there's a nice change of pace in the process of stepping back, looking over the previous work, and shaping it into something that communicates the ideas well to reviewers.
You're probably committing and pushing at acceptable times. Screw the consultant.
Committing every 30 seconds seems like it would knock me out of my flow so often that I wouldn't get anything done.
That being said, if I'm working in the same files as someone else, I'll commit every few minutes (and so will they) so that the amount of conflicts we're creating don't get out of hand.
New commit for new logical "part" of feature.
Rebase interactive when feature is "done" (in some way) to fix commit messages and squash some extraneous commits.
Push (as a branch in forked repo).
Sometimes I push before the feature is complete for backup/accountability purposes, but then I rebase anyway and push force the thing once it's done.
push and push regularly, in case you have merge conflicts. Get the continuous integration server building on commits and please have it email the team when the build fails too.
How often do you press "Save Game" during a new level?