Perhaps you could ask the kids who they really admire, or what products or things from their own lives are impacting them. I'll bet there are unknown engineers and scientists behind just about every single man made thing they come into contact with on a daily basis.
Reach out to those companies and see if they will put you in touch. Try the PR department possibly for the intro. This will give the kids a real connection to the people.
If these are products where the kid is the end user, the engineers might love to spend an hour a month on skype with them just to gain insight into their lives to make better products.
Some people might agree to help kids because they want to, and that is great, but you will 10x the value for BOTH the kid and the scientist if you find a way for them to really help each other (and it's massively possible).
I've mentored high school / college kids into pro athletes, wildly successful entrepreneurs, activists and non-profit leaders and it's always been rewarding.
Finally, the process of finding a mentor is a skill that most people lack -- what a great chance for you to involve them in finding their own mentors and letting them reach out, send emails, and otherwise discover the power of their own voice and agency.
Fun Fact: When I was in 5th grade back in the late 80s I had a secret pen pal / mentor I found in the back of 2600 Magazine who was in federal prison for hacking ;)
Firstly, cheers and congrats, it sounds like you are already doing good work.
My 2 cents: Hold off just a second before finding an ongoing mentor. By 5th grade students can start to get a feel (might be this year or maybe next year) if they like computers or engineering or space exploration or biology or fast cars or another field/type of science work etc...
Finding a mentor in area of science that a student loves, after sampling different areas of science can make a huge difference in terms of sticking power. And it minimizes the potential issue of too many mentors coming in and out of their lives as you find nice scientists who want to help but they don't click with the students.
It sounds like you are already able to teach science and programming and introduce the students to various scientists and companies and labs. I would continue doing this, as sort of a "middle man and a teacher" until an area of science or type of scientific work grabs the student's attention and he/she connects with it and thirsts to learn more about that thing (for me it was astronomy).
Then work on finding a mentor in that area of science.
If you haven't heard it, Malcolm Gladwell's interviewed Eric Eisner (who started YES Scholars in LA and deal with similar issues regularly) recently and it might of interest: http://revisionisthistory.com/episodes/04-carlos-doesnt-reme...
I am in LA and have been a volunteer math tutor for over a decade. Happy to help in other ways if I can.
I might have been doing a project and lost half a day of my work just as well.
Now I have to go and take all permisions away from Reboot service in Windows 10
Also it keeps adding fucking Edge and Store to my quickbar every single update
Is Microsoft retarded? How can this be a good idea
It's designed to make not updating as difficult as updating so neglectful users don't default to not updating.
Think about it this way. Chrome's major innovation was being the first browser to rapidly update itself. That allowed it to quickly leapfrog over IE and Mozilla since they could push out many more changes over the same period of time AND those changes would be more likely to be stable. It also eliminated the need to support old versions like IE 6 with security fixes
Why not make the world a better place, push the updates hard, and just jump to the shit talking? ;)
Because the "move fast and break things" of app development has hit the mainstream and crossed over into the OS.
It allows for faster iteration at the expense of some stability and familiarity.
If you are expecting clients to integrate with your backend without documentation, and you do not have an enterprise-level agreement, then it would be a deterrent for integration on most teams. Making that case should be straightforward. More documentation would mean more adoption, which means more value for the company.
One way to make API documentation easy is to generate it from code rather than write a doc manually. This can pull from class and method comments to add description to your endpoints (if those comments exist and are relevant), but even if they aren't there you'll still have access to the endpoints and the input/output.
I'm not sure what your tech stack is but here's an example using Django w/ Django Rest Framework. You can use Swagger  for docs / a browsable interface to the API. Then you can use an integration like Django Rest Swagger  to automate most of the work.
To put it another way, you'll never have enough leverage to talk another business unit into spending their time and money to solve your problems. You need to make your problem someone else's -- someone with the ability to force the solution.
What are the product-owner's overall goals? You should tie documentation to that. In a healthy organisation, the product-owner's goals will either be already pretty clear or they'll be actively working on making them clear. If they aren't clear to you then do a quick check through emails/minutes/retrospectives to see if you've missed something and ask for a half hour on their calendar to seek clarity. Take the bulk of that time to listen to what their priorities and stressors are. Pay particular attention to where your work fits into that. If your work actually doesn't fit into that then you've got a bit of an organisational incentives problem. Assuming it does, then make your case that documentation in a canonical place (even if it is those same json files and some comments) is not a nice-to-have but a need-to-have for frontend to deliver what the product owner needs.
For all of this, I've assumed that the product owner for the backend and frontend is the same person. If it is two different people, then you might have a conflict of incentives that needs to be fixed: The backend team has little/no incentive to help the frontend team. If that is the case, then you should have a chat with the product owner of the frontend team because that is an organisation-level problem and some incentives will need to get re-aligned.
Start by creating a Github wiki for documentation for both front-end and back-end API's. Add them as collaborators, or create them right inside each existing repo if you can. Populate the back-end one as best you can to your knowledge, then ask for them to validate.
I always think of documentation as a note to my future self. In X months, what won't I remember?
What are your expectations?
What is the minimum possible that could be done to meet your expectations?
What deficiencies currently exist that are blocking you?
Once you have this written down, only then should you approach the other party. Remember YOU think it is "messy" "lacks docs", however others may think it is fine. You will not win any friends by demanding someone does more work that they don't consider to be worthwhile.
If you have no leverage, then you are asking for a favor.
Be nice, be friendly and courteous. Try to see the other person's viewpoint.
Good luck in your negotiation.
lunch varies a lot and it's whatever... sandwich, leftovers, soup. Main thing is I cut out the processed pre-prepared foods, but I do go out to eat maybe once or twice a week. I enjoy a burger and beer if I want to.
Edit:Another benefit is that you don't get the after lunch crash.
Lunch: Left overs from last night's dinner, or sandwich. I try to avoid lunches that are carb heavy or a on the greasy side. Today is salmon and beets with a bit of rice.
Mid-afternoon: fruit, nuts or a treat like cookies
Drinks: Just water
For your needs the closest thing I found is a food delivery service for frozen home made meals. Some are.Veg only, but very tasty and filling.
I mix in other fruits and vegetables for flavoring and variety. Also, I eliminated salt and that relieved my stress in a significant, noticeable way.
I start my day at 4am, if I eat heavier, carb-based items, I notice a crash somewhere around 3 or 4 pm and the last few hours of my day are a struggle. If I stick to what I listed above, I power through the afternoon and feel more balanced when I end my day.
Mid-morning I'll probably have another cup of coffee, and will start trying to remember to drink water. I have a big plastic cup on my desk.
Lunch totally depends. I try to bring lunch. Often that's a sandwich or wrap (with fruit and yogurt)--it so happens that's what I have today. Sometimes it's leftovers. Otherwise I'll grab something nearby. We often have food trucks in front of the building, or I'll get a sandwich from the cafteria in the building (OK) or one of the couple nearby places (Peruvian chicken: heavy).
Mid-afternoon, I'll drink water, tea, or--if I'm having a bad day--coke. If I'm hungry, I keep a pile of Clif Bars in my desk drawer.
I'm usually out by 6:30, so will go home and make dinner.
Lunch - Bowl of mashed sweet potatoes, avocado, apple, chicken or beef and all of it mixed with coconut oil, cinnamon and garlic. Takes less than 5 minutes to prep, most time spent after is just waiting to steam the potatoes and cooking the protein source. Can be made ahead of time and put in containers (I usually work from home so I make this during the day as a break). Not exactly a light meal but can be really filling.
Throughout the Day - Water most of the time, usually cut out caffeine past noon unless Im at a coffee meeting.
My side project is: "How to Make an RPG" (http://howtomakeanrpg.com/) which I released in June.
It's a collection of code samples, art and digital book that shows the reader how to make an old-school, Japanese-style RPG. So, it's super niche! I wrote a little about my process here:
There was supposed to be a second part to this article but I haven't written it yet.
It's been over $1000/month very comfortably so far but it is trending down. This isn't uncommon for this type of project - there's often a spike followed by a slow decline.
Still, for the last three months I haven't actively worked on it and it's still sold well. I've moved country and been finding a job (all sorted now), so I haven't had much free time.
I'm not really sure where is good to go after this project. For now I'm building on the base the book introduces, just for fun.
* You do have time. I work a time consuming job, have a wife and kids, and still found 1 hour per day to work on it, and that was enough. * Automate everything that you can. Early on I automated the deployment, the creation of new accounts, the management of the sales, and soon the marketing. * Have a plan and stick to it. I planned to use 1 hour per day and I did. I have a backlog and I work against that always. * Pick a market you understand. I help a lot with my kids schools and this is software to help with that. * Drop bad ideas when needed. I have started more side projects than I can think of. Sometimes in the past I have felt bad because I didn't want to give up on an idea. So I worked on a bad idea for way too long. Don't do that.
It made a few thousand in Amazon referral fees after being at the top of HN, Product Hunt, and Designer News for 4 days. As these traffic spikes wear off, I expect it to continue at at least $1k/mo.
To maximize referral fees, I use this clever service called A-fwd, which geo-redirects visitors to their appropriate Amazon.tld so that they can make a seamless purchase without switching regions. This also allows for my affiliate codes to stay intact, and for me to collect worldwide Amazon affiliate revenue.
I also had to learn the ins and outs of Amazon Associates policies, which are incredibly finicky (no Amazon links in emails, no showing product pricing on your homepage, etc.) and frequently results in unannounced account closure that requires you to pester their support team to get things back online.
It's pretty meta to be posting this here, because Indie Hackers is basically a huge collection of interviews with developers who are making money from their apps and side projects. I only include interviews with people who are willing to share revenue numbers, employee count, etc. There's also a forum/comments section where you can ask your own questions to the interviewees if you find my questions lacking :)
...Assuming that I ever finish a side project.
...And that I ever come up with a side project somebody would pay for.
Neither is very likely.
It was just an Android soundboard app for a very popular TV show in Spain. You could tap a button and it'd play some funny sentence from a character from this show. Long press, you could share that sound.
Revenue model: a little ad bar on the bottom of the screen.
It grew from 60$/month to > 1000$ in around 6 months, only through word of mouth. That lasted another 6 months or so until the show became less trendy.
Probably not very sustainable as I was piggybacking on the popularity of the show, but it taught me that making money was 100% not about writing 'the bestest codes'.
Me and my twin brother have had it as a passive income thingie for years. After a failed attempt at selling it (SaaS metrics are NOT easy) we met a guy who saw some potential and we're finalizing paperwork with our lawyer to create a Swedish limited company right now with him as co-founder. We will try to take the plunge and get it running as a full time company within a couple of years!
Achieving a lifestyle passive income project is surprisingly hard...
We organize trips around the world for developers, designers, and entrepreneurs who want to work remotely while traveling. People pay us to organize housing, accommodations, and community events wherever we go (past speakers have been CIO of Estonia in Tallin, Matz in Tokyo, etc.).
Happy; to answer questions about running more of an ops business that still is related to tech.
Feem is a great cross-platform way to share files within your LAN.
I started building the app 4 years ago. I put it on Hacker News and it blew up a tiny bit. That was enough to keep it going until now.
There is still a lot of work I can put into it marketing or coding wise. So far, it's been going well ($800ish). I recently rolled out a UI/UX improvement.
Its 4 year anniversary is in 2 days. :)
I run http://www.boxfactura.com, an email service for your digital invoices. It has been quite a journey because everyone I speak to has some kind of trouble with their invoices, but they don't know there's a product for that, so first you have to market the idea of it, and then the product.
I created this project for learning purposes and because it was a lot of fun. I open sourced the actual gantt component: https://www.angular-gantt.com
edited for clarity
I guess it's partly because we are used to these pain points for a long period of time we don't feel it as a pain point anymore or even though we have a good idea it's not easy to build it as we need lot of capital to do so.
Also even if we have a good idea monetizing is a whole new ball game altogether. Like the chrome extension I'm hacking together on weekends which allows people to search for restaurants around them. I have no idea how I can monetize it and just build it for the challenge of making it.
I think one option is to keep on making cool things. Do something challenging and keep pushing out new things whenever you can. And finally one will stick. I don't think it's easy but if one keep persistent in shipping new things definitely one will become a success.
Like in a similar post I have made like this in the past I remember one commenting, we as HN users believe that everything that we make should be like Airbnb or Uber due to the illusion of success in many startups. But that is not the case and it all comes down to being persistent and enjoying the journey along the way.
Loads of fun while it lasted! Gave me a nice income bump for 3 holiday seasons.
The trick is that after a few times around, the courses require a bit less preparation.
Adjuncting is an absolute nightmare if you are trying to do it as a full-time job. But as a side thing for beer money when there is a staffing need? It's pretty light on stress. Since I am not gunning for tenure track (or even a full time position), there are little to no stakes involved.
Weirdly, I think the folks in my position (teaching as an adjunct as a side gig) along with the tenured full-professors on the opposite end of the academic spectrum are actually very similar in that regard.
I'd share more, but the arbitrage only exists because of a market inefficiency and I'm sure that if anyone here started competing with me, the market would become too efficient to easily profit :-).
It was a lot of work, but it's a great passive income now that they're done, and I'm quite proud of how they turned out. The Pluralsight authors are a great professional network to be plugged-in with, and being an author is a pretty unique differentiator on your resume.
I'm going to put together a third course soon.
They're always looking for new authors. https://www.pluralsight.com/teach
It's been very good to me, but also trending down as people seem to be diversifying from Meteor. Certainly not what I expected when I got into it.
The story for it is a simple one: I solved some of the annoyances during development for myself with by making a devtool, and then open sourced it.
The reaction was very positive and encouraging. Between the opportunity to make more tools, and the downside of having to maintain them, I decided to create paid tier for the tools.
This year we're launching new features and a simple API: (https://sentopia.net/apidoc/)
The majority of that is from sponsorships for the weekly newsletter, which has almost 13,000 subscribers now. Currently doing cust dev and what not to see if there are income opportunities that don't involve ads.
The project started because there is always need for documentation for software projects (in my career), and a lot companies are not used to have one. At the same time, I want to learn Scala so I pick up Play! framework to play and build real world app.
Happy to answer any questions!
We don't just copy-pasta public domain titles. We actually go through it, and create a really nice table of contents, include flourishing images to chapter headings, link any footnotes, and re-typeset so there's pleasant vertical rhythm to the paragraphs. We really pride ourselves on creating a great user experience rivaling titles from major book publishing companies that have delved into the foray of e-book publishing. CSS for e-books is a repeat of browser compatibility problems reminiscent of the 90s unfortunately.
Our average price is usually $0.99. Our genre is theology, so we publish books from Augustine, Thomas Aquinas, and John Calvin to name a few.
We make over $1K/month, but sales are on a downward trend. The hype of e-readers has faded in the past 2 years. It's not that e-reading isn't cool. It totally is. Just like the mp3 player was a great successor to the Walkman. The problem is that there isn't One Great Device for e-reading (like the iPod was).
A review of e-reading devices:
iPad: No person with eyeballs can read on an LCD screen for more than 2hrs, but I can read a physical paper book as long as I want. Dead-on-arrival in my opinion. Sales from this market never overtook sales from the Kindle store for my company.
Kindle: Better than the iPad. That's not saying all that much because they're only better because they use e-ink. That's it. Navigating and whatnot is still really janky. The worst thing about the Kindle is that all text is justified. There aren't any settings to change it to left alignment. It's nuts. You have to see a screenshot of some text to see how absurd this design decision is.
Kobo: These guys make the best e-readers. They are e-ink like Kindle, but they have this revolutionary technology called "left alignment of text" instead of justified-only text on the Kindle. You don't have the sophisticated backend infrastructure like Apple/Amazon for synchronizing your books/bookmarks/highlights/blabla. But it's not that important really. Just sideload your e-books, and dupe your e-book library on your computer. That's an end-to-end backup plan. You may not have heard about Kobo because they don't have the marketing budget like their competitors.
My company is called Fig, because I started the company on Fig St in Escondido, CA while I was in seminary. Here's some of our titles on Amazon: https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Dd...
Footnote: I probably went too far with this off-handed hardware review, but I'm drinking wine and felt loquacious.
A few clients also wanted to send me cheques. But you can convince them that these other options are better for your working relationship. As their trusted contractor youre expected to deliver results and not skimp on details or make compromises. You should expect the same from your client, including their accounting department, and working with cheques cross-border is a compromise in the working relationship.
I'm really not surprised. It's the same with EU countries having to wire money to some non-euro currency.
Why not setup a US dollar account? After receiving payment in your client's currency, you can rather cheaply convert it to your own currency.
In my experience, US companies are interested in PayPal or TransferWise or other such methods only when for some reason wire transfer is not an option. I don't think you are in such a situation. Depending on the amount, using those services could be more expensive than handling a US dollar wire transfer with SHA (shared costs).
So let me elaborate. Mostly what will you get from support is: "We are fixing problem", but in our case they were specific, "We have problems with Heroku logspout connection, 'heroku log' should still work." And the other time we went a bit over limit so they upped plan for free for a short period, se we could figure about what the problem was. Alerts are also what we use the most (no limits, no delays) which cannot say for the other providers.
Good work Papertrail, if you are reading this.
Sumo Logic, Graylog, Loggly, PaperTrail, Logentries, Stackify:http://blog.takipi.com/how-to-choose-the-right-log-managemen...
ELK vs Splunk:http://blog.takipi.com/splunk-vs-elk-the-log-management-tool...
Hosted ELK tools:http://blog.takipi.com/hosted-elasticsearch-the-future-of-yo...
We're actually building (and using) a log alternative called OverOps (https://www.overops.com), it's a native JVM agent that adds links to each log warning / error / exception that lead to the actual variable state and code that caused them, across the entire call stack. Disclaimer: I work there, would be happy to answer any question.
- For data exploration, we use memSQL. We keep the last days worth of data there(we DELETE rows to keep the memory footprint down), and because most of the time its about understanding something that has happened recently, its almost always sufficient. Each row contains the events representation as JSON, and we also have a few more columns for faster lookup. memSQLs JSON support is great(we used mySQL for that but it was too slow), so we can take advantage of joins, aggregations, windowing etc.
- For data visualisation, we use ELK (but its pretty slow), a tool our ops folks built (otinanai: https://github.com/phaistos-networks/otinanai) and we have a few smaller systems that generate graphs and reports.
- For alerts and tickets, our ops folk built another tool that monitors all those events, filters them and executes domain-specific logic that deals with outliers, notifications routing, and more.
This solves most of our needs, but we plan to improve this setup further, by monitoring even more resources and introducing more tools(Tank consumers) to get more out of our data.
The one I really wanted to use/like was http://scalyr.com. However even after their redesign, I still can't use their query language. With LogEntries, it's pretty natural.
* Decent Java logging integration (some services treat things line-by-line, this is a deal breaker for things like multi-line Java exceptions)
* Reasonably priced
* Alerts are kinda nice
* Sometimes UI maxes my Chrome CPU
* Live mode not stable at all
* UI is clunky to say the least. It's not always clear what the context of a search is, the autocomplete is obnoxious. I heard they have a new UI coming out sometime, who knows when
Now we use self-hosted ELK (elasticsearch, logstash, & kibana) and I'm not itching to go back to any of the hosted services. It's not as good as something like papertrail for tailing log streams live (although that isn't very useful at larger scale) and the UI of Kibana does take a bit of getting used to though.
We use https://github.com/gliderlabs/logspout to forward all our docker logs to Papertrail... it's like you are watching your nodejs services running in your terminal. Seamless experience.
Our analysis frontend is plain old SSH, bash, grep and less.
I've expanded on this idea here 
 - https://github.com/acionescu/event-bus#why
Disclaimer: I work there :-), happy to answer any of your questions.
The stack which we used in our organisation is,
1)Fluentd - for log line transporting2)Elastic search - for indexing3)Kibana - for viewing (remote log viewer)
ELK (logstash, self-hosted) is... consuming. The software is free, but it takes a lot of compute resources, and isn't trivial to come to grips with (setup or daily use). If you can spare the staff-hours, ELK can be pretty powerful, though.
Never couple spending to income. That's a recipe for always feeling poor. Instead, find a baseline where you can live and make sure that it lies at such a tiny fraction of your normal income that you never need to think about thinks like "budgeting" or "saving".
So if you're fresh out of school with your first $50k/year job, make sure you can fit your entire life into $20k/year.
When you take that $120k/year job a few years later, live on $20k/year.
When you crack the $300k/year barrier with your RSUs from Google, live on $20k/year.
That is how I've always approached things, and it makes life a lot less stressful (since it removes the number one worry that everybody else has from the equation). There were several years when I was traveling and consulting where I'd only take one little $10k gig a year (or nothing at all), and there was never a question of running out of money because it naturally went out the door so slowly.
If you do what everybody else does and ramp your lifestyle up to meet your income, you're just ensuring that you'll be in trouble if things go south. But once you have a dozen years of accidentally saving (n-20) per year, you can survive for years at a time with no income at all, so bumps in the road don't feel bumpy at all.
Fix that and you'll stop needing to ask questions like this one.
That aggressiveness comes from reaching out to my existing network more, stretching that network to more people and also removing things that compromise in the contract work search (bonus if theyre also sapping money). So things like Netflix, eating out regularly, or anything else thats definitely a Want but not a Need, are put on pause as well.
But this would be a lot easier if a buffer was created first so you wouldnt reach this situation in the first place. Or if you did then youre prepared better for weathering it out. You build a buffer to help you financially and also mentally: build up a war chest with either savings or investment money and do things that make you uncomfortable while you have the room to do so, so they dont make a mess of you later.
When I wanted to cut down costs, I built some software to take advantage of referral programs from startups and used that to get free food for a few months. But if I found myself in a situation where I truly feared my ability to pay rent, I'd start contracting and look into moving elsewhere.
I fish for contract work when it's available and try to generate passive income where possible. If you're living on $20k, the 3-4K you get from your asset portfolio goes a long way.
If I had no assets at all, I wouldn't be willing to enter the start up game . I'd look to ratchet up the ladder to a bigger buffer first then role the dice.
If I had to ... I'd consider taking s part-time job doing whatever and finding a living situation that the part time job could afford (e.g. Sharing an apartment uncomfortably). I'd spend the rest of the time on my start up or trying to ratchet up a better living situation.
What's that saying about logistics winning wars?
Startup is high risk business.
If the tough times look to be continuing indefinitely they aren't tough times they are life and you have made some bad decisions about where you could afford to live..
Huh? Breakfast cereal? Is this something people do in SF to earn money on the side? Or is it a joke I don't get?
Aside from that, I'm thinking it might be time to start the discussion about digital identity & reputation ecosystems again.
eXist-DB : XML DB with baked in app framework. Server side code is in XQuery. Magic for data aggregation API building.
PicoLisp : Lisp + declarative Web UI + prolog + distributed DB in one tightly coupled package. Build your next crawler in this to appreciate the magic.
Given the amount of logic being offloaded to the client in webapps and the increase in app stores (package manager GUIs with price tags) I'm wondering if there won't be a return of more dedicated desktop apps. I think Spotify, Slack, and other electron/react native style apps may be the opening salvo. They seem to be mostly geared towards allowing offline operation as opposed to enabling distributed applications, but it'd be interesting to see if/how that arises out of people becoming used to native apps again. I could imagine Slack in particular cutting down on its requests to their servers by figuring out a way to make teams opportunistically p2p and updating the server with diffs in larger chunks.
I think the nanotech will need another decade or 2, and perhaps a break through in battery tech ;), but I can see us getting there in 2-3 decades.
IMHO you should go with Heroku and ignore anyone who's suggesting dedicated servers, VPSes, AWS, Docker or containers. Every moment you spend maintaining a server or doing devops is wasted because it's time not spent building or marketing your _app_.
New startups' biggest expense is founders' time. It seems a lot of people, even on HN, don't realise it because it's a hidden cost. But if you think that a decent developer is worth at least $50/hr and it might take you an 1hr to set up and 1hr/yr to manage a server (e.g. apply patches, update security) then you're better off not spending those 2hrs and paying an extra $100 hosting your app.
Worrying about the future infrastructure cost is also wrong-headed. It's a kind of premature optimisation. To get the real, expected future cost, the projected infrastructure cost has to be multiplied by the probability that you'll actually get big, which for start-ups, is very low.
If you have to run a dynamic site (less potential headaches if you avoid this), I would try to use something like Heroku. It's easily one of the simplest way to host a robust site that needs to scale without having to spend much time on admin and DevOps.
For the people recommending a VPS, DigitalOcean etc., you're talking about using a huge amount of your own time to make such a setup as robust, easy to use and low maintenance as Heroku. What about backups? Scripting server creation? Adding a load balancer and more servers? Security updates? Server security?
The more parts and scripts you have to put together yourself, the more things that can go wrong and the more time of yours it's going to consume. If you consider how much your own time is worth and how important your startup is to you, trying to save anything in the realm of $10 a month on a core part of your startup doesn't make any sense if this is going to cost you multiple hours of time a month.
The hosting cost may go up quickly, but if your business is successful you can either absorb it, or spend time and money to migrate away. They run on AWS, so picking the same location means you can run mixed infrastructure (part on Heroku, and part on AWS) without a latency hit. Thus, a hybrid configuration is very viable.
Another good VPS option is DigitalOcean, which offers a smaller (and cheaper) plan for $5 / month.
There are also a lot of shared hosting providers out there that will sell you cheaper space, but I would not recommend this for anything non-trivial, as most of the time, you'll be limited to using PHP. Still, if you're looking for the best bang for your buck and you're willing to settle for shared hosting, check out Nearly Free Speech -- they are head and shoulders above any other shared hosting provider that I have ever tried.
The cost/benefit analysis is ALWAYS positive in favor of Heroku until you hit super massive scale (minimum 2-3 years out for most startups, if ever). It's super easy to use. Their feature set is increasing monthly and they can handle a lot of different types of setups.
Strongly recommend to go for something simpler and lightweight to reduce the time waste as lots of other comments suggest.
At the end of the day you don't even know if anyone wants your product or what first user's opinion is, why waste time on shiny host set-up?
In most cases though (brace yourself for an unpopular opinion) it's enough to setup a simple dedicated server for about $20-$60 per month.
Now I did read the comments that mentioned how getting a dedicated server is a waste of valuable time, but honestly you'll most probably be able to get it setup in a day, you'll also learn how web servers work along the way and you won't have to depend on third-party cloud services (yet).
Here's a great guide from DigitalOcean on how to setup a modern dedicated HTTP server with MYSQL: https://www.digitalocean.com/community/tutorials/how-to-inst...
Also do apply for things like BizSparkhttps://bizspark.microsoft.com/
if you have a static marketing page, you can also host it for free ( almost ? ) on https://firebase.google.com/docs/hosting/
Good general advice is this: The simplest solution is often the best, but in some cases that means taking your old desktop pc, install ubuntu, configure your router to publicly share http and https from that computer. In other cases it means using a toolset like Heroku.
Please don't be mad about this, but the way you phrase your question it is very very likely you have so little skill that you don't even know how little. Please consider to pay a freelancer to support you. He likely has more skill and has experienced more "this can never happen in real life" F-Ups than you, and therefore can handle a lot.
Reliable: AWS / Rackspace / DigitalOcean / Google cloud / basically any famous one.
When you're starting, it's probably better to rent a cheap VPS server. If you start growing fast, you can always move to the cloud. But modern cheap VPSs are quite powerful. I have 7 websites running on one that costs me $6/month.
 - https://www.digitalocean.com/hatch/
Heroku is easiest and relatively cheap until you scale. (Great problem)
Lots of people seem to use AWS. My limited understanding is that it is marginally more difficult to implement than heroku.
You could also go with someone like Linode. I would only go that route if you have implemented before. There is a learning curve and if you are trying to get the site up quick, I would go with a different option.
Full disclosure: I work on Google Cloud, but it's unclear you need a cloud provider.
currently i'm hosting a golang web + restful api + websocket server + sqlite3 db + redis + nginx all on a single micro AWS server, but my marketing hasn't really started yet, we're talking about <100 hits thus far per day.
Personally, for almost any product I start here. Even if you do need server-side infrastructure for the product, hosting all your marketing pages on GH pages is probably the right choice - they're going to be better at reliably hosting and serving static content than you are. Focus on your product instead.
When I do need server-side logic I then usually go for Digital Ocean, because they're very cheap, pretty great, and far less complicated to manage than EC2. It's also pretty easy to set up Dokku: https://medium.com/@pimterry/host-your-node-app-on-dokku-dig.... With that on top you then get a quick & effective Heroku-style deployment experience, at a fraction of the price.
At https://mnx.io (my company) we offer various options with reliability, and performance at our foundation.
Edit: a bunch of downvotes for trying to be helpful, how nice.
And I agree with that - every new device and operating system changes things, and most often those changes are not necessary. I am not talking about functionalities, but UI.
I am not sure there is any value added in the UI changes between Win 95 and Win10. I am still using the good old WinAmp and TotalCommander which still have not changed by pixel in the last 10-15 years. Once you get used to certain technology, even if it is uncomfortable at the beginning, should not be re-designed and forcefully imposed on users.
I have to be very specific, like I have to say click the button about 2 centimeters to the right board of the monitor.
I understand the design pattern of an ui. even I'm new to a software I know where to find what I need. but to them, every new ui is completely new.
For example, they still can't tell when to double click on a button/icon, when to single click.
I gave up on educating them, all I hope is a simpler way to provide remote support.
there used to be a remote desktop app called crossloop, which shut down after its company got purchased.
it's very easy to use, once run, it generates a code and just enter the code on my side, I can take over their desktop.
the closest solution now is chrome remote desktop, but guiding my parents through app store to install it is a long pain process and they can't remember where to find the app next time.
I thought about recreating crossloop myself for people with the same need. But I talked to my friends, they don't seem to share the same pain. And I thought the market for this will shrink as the newer generations are more familiar with computers.
- Navigating the file system is confusing, esp on a PC with a lot of default folders that don't need to be touched
- Drag + Drop relocates local files, but copies if you're uploading to the web/external device. Same action but different results.
- Setting up a new device with the essential software
- Debugging printer and wifi problems.
- Password recovery/management (she can't use skype anymore)
- Figuring out google drive (finally migrated her business on this)
- the concept of shared files vs attaching everything in emails
- to her, the internet is youtube, gmail, and google search.
- tabs are like browsers in browsers. How do you remember what page is opened in each tab?
- product names are non descriptive. Why aren't they called "Chrome Browser" and "Firefox Browser"?
- discovering her mobile number (i taped a sticker on the back of her phone with her #)
- making text larger (if she needs glasses to read, she won't read)
- managing push notifications and clearing voicemail (notification overload --> ignores all messages)
- She confuses the concepts of apps, icons, links, buttons, and thumbnails.
That said he still prefers sending his emails with his 12 year old Window XP laptop running Thunderbird.
He may write programs on paper, and send them to you to type them in, compile them, and print out a listing with the errors. You then send back the listing, and he will correct his program and repeat.
He'll become a great programmer, since he will have to be extra careful to avoid losing one week on some typo.
Now, it's been a few years since gcc has been able to produce a real listing of the compiled source. You would have to write some script to combine the error output with the source file to produce a classic listing. Similarly for other common modern programming language implementations.
On the other hand, without direct access to a computer, he would not attempt to write any interactive or GUI application, only batch programs, unless the interaction is performed only by an external tester for him.
Another idea: some progress has been made on optical character recognition, so if he can write well enough, it may be possible that you may be able to scan his written programs, and convert them to source file easily, without having to transcribe them. So the process could be smooth enough.
If writing ustensils include typewriter, then even better for the OCR!
Also the following books, which I've copied and pasted from somewhere, to learn theory:
Mano, M.Digital Design, 3rd ed.Prentice Hall, 2002
Mano, M and Kime, CLogic and Computer Design Fundamentals, 2nd edPrentice Hall, 2001
Gajski, DPrinciples of Digital DesignPrentice Hall, 1997
Tanenbaum, AStructured Computer Organization, 5th edPrentice Hall, 2006
Patt, Y and Patel, SIntroduction to Computing Systems: From Bits and Gates to C and Beyond, 2nd ed.McGraw Hill, 2004
Null, L and Lobur, JThe Essentials of Computer Organization and Architecture, 2nd edJones and Bartlett Publishers, 2006
While I was stuck in school and did not have access to a computer, I wanted to challenge myself during classes. The most interesting distraction by far was to play around with the programming functions of my TI-82 calculator that was required for math classes. Even with almost no idea about programming I could soon do interesting things with it, because it is programmed using a version of BASIC. In the end I even created a clone of snake. It worked, but moving one block ahead would take 2 seconds.
I'd recommend O'Reilly's Head First books. Even if they're a few years old, really doesn't matter, given the situation. I think Sandi Metz's Practical Objected Oriented Design in Ruby is great - she does an awesome job of explaining OO principles even if you don't end up writing Ruby. The Manga Guide to Databases is another good read that explains concepts well.
I'd also consider a book that shows a quick way to build web apps, like Agile Development in Rails or maybe a book on ColdFusion. Without the ability to write and run code, it can help plant seeds for those "aha!" moments for understanding the code -> web request lifecycle without getting bogged down in ceremony.
In Texas, the books had to come from a bona fide bookseller, so don't go to B&N and try to mail the books yourself.
This will be much more productive than trying to learn to write code from scratch while also learning a language and learning how to execute the code with pencil and paper.
I would start by going through the exercise yourself: pick out a book and use one of the first sample programs, and set up a "debugger" on a pad of paper.
I used to do this kind of debugging myself: when I first learned BASIC back around 1969, I spent some time in my grandmother's basement with two pads of paper, one with my code and one for the debugger. The debugger pad had columns across the top:
Line number One variable Another variable Another one
After going through this exercise with one program, send your friend the "debugger" pad along with the book, so he has a place to start with this idea. He can then go through the same example and follow along with your debugging steps.
That way he has a solid place to start when exploring the other sample programs in the book.
Please feel free to email me if you'd like to kick this idea around - address is in my profile. And I strongly suspect that everyone else in this thread would be happy to extend you the same offer.
I also heartily endorse the suggestion to read Charles Petzold's _Code_. It's a wonderful book!
This does not give any experience in debugging, which is not taught in books, AFAIK. I am not sure what to do about that...
-- If he'll be in for a year or two with essentially zero access (no computer inside, no computer buddy outside), he should learn something related to programming (math, web design with CSS, etc.), basically re-ordering a typical multi-year learning sequence to put the coding later
-- If he'll be in for ten or more years, he should learn something else. His learning will be so slow and the field changes so quickly that he might learn a few timeless fundamentals, but that's all. He could accomplish much more in some other challenging field that didn't require tools he wouldn't have (ex: math, physics, accounting, ...)
-- If he'll be in for less than five years with access to a computer (via friend outside, for example) every couple of weeks, it could work. It would be like my situation when I was a kid and kids didn't have computers (but I was able to sneak some access). I would do it differently now from what I did then. I would read programming books and get my hands on lots of small example programs. You read the lesson, do the exercise on paper, run it on paper, and only when you are SURE it works (or you're SURE you don't know how to make it work), you read the "answer" (code written by a pro) and study it. Use worked examples as feedback when you can't get it from an actual computer. As you do this, write simple things and send them to the partner on the outside as you continue to work examples on the inside. The turnaround time won't delay you as much if you have other things to do while you wait.
Now, take his real situation, consider the above scenarios, and craft one that will work for him.
Also, you should give him realistic expectations. Learning to code isn't the panacea that many think it is. There are many broke but talented programmers out there, and most don't have the extra baggage associated with a felony conviction. If he doesn't truly have a passion to create software, and is just looking for a way to make money, there are more efficient things he can learn about - like the psychology behind viral marketing (The Tipping Point by Malcom Gladwell and Purple Cow by Seth Godin might be good for example). I know someone that couldn't write a line of code to save his life, but makes 6 figures per month creating Facebook pages around ridiculous topics and using them to drive traffic to affiliate offers and his own Adsense pages. Your friend can always hire coders when needed if creating software isn't what he actually wants to do.
Those are topics that one could make progress on with only a pencil, paper, and the occasional phone call to a mentor.
Apart from that... reading books and solving programming puzzles might be a good way. Something that has a feedback loop, which you won't have in the normal way without a computer at hand.
I must take my hat off for this kind of determination! I hope it provides your friend with a way out and they have a better life ahead of them.
1) Edovo is a tablet learning solution that is in many jails (https://edovo.com/)
2) Another group The Last Mile, while they got their start in San Quentin, is working to bring their program/model to more prisons. https://thelastmile.org/
Regardless, I would encourage reaching out to either program to explore their options further. The people behind each are incredibly helpful and may be able to assist you with additional details.
CS Unplugged: Computer Science without a computer and Nine Algorithms That Changed the Future: The Ingenious Ideas That Drive Today's Computers. I've also posed a problem for him to ponder:
"You have five fingers on your hand (usually -- a few people have more, many have fewer). Each finger can be either extended, or curled up. So a fist would be all fingers curled up, a high-five would be all fingers extended, and many other combinations exist (including the obscene middle-finger gesture, and probably a whole lot of gang signs). What is the total number of possible combinations that can be produced using five fingers? Can you do them all? What is the total number of possible combinations that can be produced using ten fingers? Can you figure out a pattern so that you could calculate how many possible combinations there would be if you had 16 fingers?"
When they're out the hard working ones will have programming skills which will help with the job hunt.
Maybe work on a conceptual project. E.g build a complete UML solution for a HN clone for example.
That'll take care of the analysis part.
If he's enough time then move into discrete maths and algorithms.
That'll sandwich the actual coding , after which it'll be a short effort once he's got access to a computer
But I feel like I saw an actual curriculum without a computer recently, but now I can't remember what it was, curious to see if it shows up in this thread. Great idea for the incarcerated! I'm going to see if I can figure out what I'm thinking of.
Ah, I think I was thinking of the CS Unplugged that others have mentioned, sweet!
Thanks for this post, I think I'm going to buy a few copies of Little Schemer and CS Unplugged and ship them directly to a Books to Prisoners program I know that sends books to prisoners in response to topical requests.
It is aimed at school children, but it's a place to start.
With music, we are taught to read before we write.
With programming, we start out writing.
This seems like a great chance for your friend to try out the music learning approach. Send them books of excellently written programs, and allow them to read before they write.
[As a side note: What is their goal? To program to become a software engineer? To program to build web applications for fun? To program to learn how to build products to produce a profit for themselves? The goals will inform the process.]
One of the key things to also understand here is - what is missed out in this type of training. Tools. Tools. Tools.
As developers we have come far away from limited IDEs. We rely on so many tools that knowing-they-exist or sometimes mastering them is difference between good-or-bad devs. I would recommend to read printed material about IDEs, screen shots of tools.
Couple of other things I have found really helpful:* I had underestimated Medium as a platform to rely for tech news till lately. There is so much of latest developer/platform news and articles. Print outs of these definitely help. * Stackshare posts (http://stackshare.io/featured-posts) on what stacks/tools companies use (and how) are eye opening to say the least. Print outs of this.
Is he in state or federal prison? Are there no classes available that could give him access to a computer?
You can draw a program on paper and follow it with a finger to "run" it. With a bit of practise, it'll be possible to run such mental models without even writing them down. At that point you're thinking like a programmer.
This skill is transferrable to any programming language.
Understanding how variables, loops, stacks and so on work was all done by writing the algorithms, and our first contact with a computer was in order to write some assembly code, after something like 2 months.
That's not ideal but you can already learn a lot without actually writing code to a computer.
Having access to a programmable calculator or even better to a smartphone would obviously be better.
Would he be able to get some kind of no-name android portable media player and write code on that ?
A simple google search leads me to QPython, I am sure there are tons of other IDEs running on Android. That might be the best option if he has access to such a device.
Would help if you shared the end goal. Get hired anywhere? Get hired by Top 4 Tech Company or Hot Startup of the Year? Start a business? Don't get bored? How long is he going to be incarcerated?
I would greatly appreciate if you shared your experience.
I recommend C++ as it is useful for a LOT of different types of electronics, embedded, pc, servers, you name it.
Also UNIX scripting is very useful.
Then he should write very small programs that he can use to build into little functions for larger ones. Something like adding two numbers at first, really simple, like almost blindingly simple, just to get comfortable with the architecture of the language.
Then write something that is more complex, something like how to make a little calculator that does all sorts of functions.
He'll need at least one reference book (which I heard you said he has, but you didn't specify what type of book, so look into it... it's a bit of a tedious process to get decent textbooks into the squares, but if you buy it new and send it to them FROM THE PUBLISHER, he can get it, you probably know this, but someone else might be reading and they might wanna help someone learn as well, so they need to know)
Additional texts of note:
Math books, especially linear algebra
Wireless Communications / Bluetooth
That'll last him at least a couple of years to really master. Beyond that, he needs to get a system of writing so that he's not having to use English constantly, as it will take a ton of time. I've seen people use something akin to semaphore, but it's not _extremely_ important unless he's older, and has used his hands a lot. Cramping sucks, and losing your ability to write is nicht gut.
Alright well, I hope this helps. Best of luck to your friend, and if he mentions a thank you, please tell him he's welcome.
Otherwise I would suggest combining CS with more applied programming with smaller scope (like a web stack), developer methodologies (designing, methodology, testing) or design (interaction, interfaces, experience). Those would be things that he could more easily be practice as he gets out, aren't as focused on credentials and would more likely land him some sort of job.
CS theory probably makes a good starting point, as a lot of it doesn't require actual coding, but still lays a solid foundation for future work. I would recommend SICP (Structure and Interpretation of Computer Programs, by Abelson and Sussman) as a good starting point. It uses Scheme, which isn't exactly a language he's likely to end up working in, but it will teach him a whole lot about thinking like a programmer.
I have used this to introduce my son to the basics - and call it "post-it" programming. We built a few obstacle courses around the house. The most advanced we got was to "unload the dish washer", that resulted in him "inventing" functions.
It typically works better when some one else "executes" the program, since bugs are easier to surface and debugging is a lot more fun.
That said, my son has since learnt to read and write. There is greater enthusiasm to "type" on a computer than use post-it notes.
Hopefully this can be adapted to your friend's circumstance. Best wishes to him.
My first thoughts:
- iterate more quickly by experimenting with non-computer users who aren't in prison, as letters/email to a prisoner will have a slower feedback loop
- learn what people consider to be more fun, and and try to structure lessons within that
- see if there are some existing resources that are close to, but not exactly like, programming without a computer
- set up an open source curriculum on GitHub, so people besides yourself can contribute
It is very much an introductory text to programming, something that can be picked by someone who has an inclination to the craft but with no prior experience. It doesn't even get into Haskell's powerful type system and sticks to primitives and lists. The intention is to teach the building blocks of programming through small, pure functions.
The text is very conversational, chapters are short and sweet, and have a lot of bite-sized exercises along with their answers which will greatly help a self-learner. It will also be easy to evaluate since functional code don't tend to get very verbose.
We'd go line by line and change the relevant registers, arrays, pointers, counters, etc. Exams consisted of doing that, too. Sometimes you're given a piece of code and asked about the state at a certain break point. Sometimes you're given a succession of register values an asked what the program is doing. A missing semicolon had a direct influence on your grade, not on stdout.
It's not guaranteed that it produces excellent programmers, but one can learn a lot and it was almost a meditation to focus like that and ask yourself "Why isn't it running?". It was cool (at least for me, I disassembled programs as a teenager and I had a computer, but I still think this was useful).
I'd also learn SICP: https://www.amazon.com/Structure-Interpretation-Computer-Pro...
and algorithms from either CLRS https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press... or Skiena Algorithm Design https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...
He can learn the algorithms and apply them to the cards in order to check his understanding. He just needs to make sure that he acts like a computer would - only ever comparing two cards at once.
He can simulate this by having all cards placed face down apart from the two that he's currently doing the comparisons with. At the end he can flip all the cards over to make sure he got the intended result.
I'm sure by doing this he could learn all sorts of algorithms this way, and learn to code in the same way.
He may not have a computer, but don't they say that the greatest computers are the ones in our heads?! He just needs to dumb it down a bit for the sake of the exercise.
Suggestions for absolutely no computers:
* CLRS, the classic. (I just skimmed the intro, though, and if he has no background in uni-level maths, it might be a little tough to digest.)
* (maybe) the Head First series (as someone else suggested). I'm wary of suggesting it not just because I have no experience with the books (I only even mention it because I know they're ubiquitous), but also because bad habits are formed early, and this could do that.
* Patterson and Hennessy - Computer Organization and Design (5d.)
* Sebesta - Concepts of Programming Languages (11d.) (but only after finishing some of CLRS, and even then I don't know how appropriate this is)
What kind of experience did he have with computers before he went in?
Depending, you may be able to make recommendations about stuff relevant to what he's used.
Can you get him something like a TI-84? Because even that will at least allow him to go in and write TI-BASIC.
But like others in this post I would recommend CS unplugged.
And depending on how long he is in there for he might want to look at:
How to Design Programs - This is a good book, and although it's in Scheme, it teaches how to create appropriate levels of abstraction, which seems to be something many programmers struggle with.
Concepts, Techniques & Models of Computer Programs - Discusses the different paradigms and how they are inter-related.
Also something a bit more vocational like The Pragmatic Programmer or Clean Code / Clean Coder probably wouldn't hurt either.
If he can read all of those he will be very well prepared to do some actual programming when he gets out.
SICP not a bad shout either, although I've not got past the first chapter.
I was driven by courisity, no pressure of completion and had all the time in the world. The book was thick with complete programs with outputs instead of snippets. Book also had list of all core packages, class and their members. It helped to grasp the core libs before hand.
I would suggest a comphrensive book. I have not checked any Osborne reference series since then, but check if there are similar ones for python.
One thing that did help me a lot when I didn't have computer or fast internet connection, were: the computing and programming paper magazines.
Maybe you can research for your friend programming magazines (on paper) which are available nowadays; and he can subscribe to them. Maybe he can even redistribute or perform as internal reseller once done with the chapters.
They use to treat diverse topics on monthly steps, and is a convenient way to assimilate knowledge. Ones are better than others and introduce less partial views... you must view on your own.
I can't help, because I'm many years without buying one.
OK, I guess I'll also mention Hillis's The Pattern on the Stone, which I feel has mostly been superseded by Petzold's Code. It's less technical and less detailed than Code and would be a much quicker read, where Code gives a more detailed understanding of these ideas.
So what books do I have?
Books on usability and web accessibility are good reads, however no obvious title springs to mind ('Don't Make Me Think!' would last your friend all of a morning).
One thing though, chess. Chess is played in prisons and some prisoners get rather good at it. Maybe encourage your friend to form a chess league if there isn't one already. Perhaps get him a really good book on chess that can be used by this chess league to be.
I'd then suggest moving to something like SICP and/or NANDtoTetris.
If you learn the abstract fundamentals first, you will understand how they apply in every increasingly complex system you encounter... and none of that is syntax or frameworks but instead an ability to see and extract the underlying problem domain, which will then guide you in the solution.
I'll definitely take a look at some of the languages mentioned in this thread that are made to be done on paper. Sounds like a great exercise.
There is a lot to be learned from writing code as it forces you to make decisions. This can be done in part on paper and in batch programming mode. There is also a lot to be learned from reading not just snippets and algorithms but from studying complete works. Software is a lot about architecture and integration. A stack of printed code and a #2 pencil is all it takes.
It might be a good place to start, at the very least. But it will only appeal to a certain sort of person.
Most (all?) CS students learn this early on in university anyways, so it's natural to study if your friend is interested in computer science.
He can also spend the time to master math, especially linear algebra. Getting a firm understanding on math never hurt any budding programmers and opens a ton of doors.
* Once released, he can play with different DSs and experience their asymptotic performances for himself.
Then buy him a RasPi (+with instal guide).
You don't need to have a computer (Von-Neumann et al didn't have one!) to invent a brilliant algorithm.
The way of thinking that such a text gives is nearly identical to the thinking needed for coding.
Just one example: We coders sometimes forget that a conditional like "if (not (A and B)) or C then..." is utterly incomprehensible to the bulk of humanity. Go through a logic book and that stuff will be second nature.
Also it helps lifelong with clarity of thinking which is nice too.
Gary William Flake: Computational Beauty of Nature
Douglas Hofstadter: Godel Escher Bach
They won't make you a programmer ready for a job at Facebook; but they will entertain the part of your head that makes you a good programmer.
The two books are also very well written and quite entertaining which give you the motivation you miss if you cannot try things out on your own.
Other than that: Study math at any level.
We used to frequently emulate a machine by hand on paper I think it was 16-bit but it might have been even smaller (not touched it since my first year of undergrad) and you could/can write a lot of cool programs for it.
There are plenty of algorithms you can learn without a computer too, and carry out on paper.
I have no idea what kind of things are allowed in prisons - would a microcontroller running a simple interpreter coupled with a small LCD and keypad be allowed? If so, something like that would be really great for applying programming concepts.
So definitely possible.
At which point the possibilities expand ...
the HEAD First book series,they have fill in the blanks programming exercises.
The best thing I found http://csunplugged.org/
He needs to find interesting things around him, and just make plans. Write it down. Without a computer he can use a paper and pencil.
I'm 'fighting' ('working' is a better definition) for civil rights in my city, so I think I will be incarcerated in the future...
I think I will organize a 'paper' version of Scratch, with me as an interpreter of lines of code.
edit: I'll miss Stallman's videos...
Print out the better ones.
Get him familiar with the lingo.
My biggest stumbling block was learning the ever changing language of all aspects of computing.
Then buy him Learn to Program by Chris Pine. I would also want him very comfortable with UNIX, and the command line.
When he gets out,if he has some support; he will do just fine.
* rsyncs the directories containing the files you want to back up
* mysqldumps/pg_dumps your databases
* zips/gzips everything up into a dated archive file
* deletes the oldest backup (the one with X days ago's date)
Put this program on a VPS at a different provider, on a spare computer in your house, or both. Create a cron job that runs it every night. Run it manually once or twice, then actually restore your backups somewhere to ensure you've made them correctly.
We basically create a backup folder (our assets and MySQL Dump, then rsync it to rsync.net). Our source code is already on git, so basically backuped on Github, and all developers computer.
On top of it, rsynch has a very clear and simple documentation to implement it very quickly with any Linux distrib.
I use tarsnap, as many others in this thread have shared. I also have the Digital Ocean backups option enabled, but I don't necessarily trust it. For the handful of servers I run, the small cost is worth it. Tarsnap is incredibly cheap if most of your data doesn't change from day to day.
My main site runs a complex series of workers, CGI-scripts, and deamons. I can deploy them from scratch onto a remote node via fabric & ansible.
That means that I don't need to backup the whole server "/" (although I do!). If I can setup a new instance immediately the only data that needs to be backed up is the contents of some databases, and to do that I run an offsite backup once an hour.
For a database driven dynamic site or a site with content uploads you can also use your version control via cron job to upload that content. Have the database journal out the tables you need to backup before syncing to your DVCS host over choice.
If you're looking for a backup service to manage multiple servers with reporting, encryption, dedupelication, etc. I'd love your feedback on our server product: https://www.jungledisk.com/products/server (starts at $5 per month).
Lots of people only do a full test of their backup solution when first installing it. Without constant validation of the backup->restore pipeline, it is easy to get into a bad situation and not realize it until it is too late.
OVH has a backup by FTP premium service but the FTP server is accessible only by the VPS it backups. Pretty useless because in my experience if an OVH VPS fails the technical support has never been able to take it back online.
For database, I use a second VPS running as a read only slave. A script runs daily to create database backups on the VPS.
Collect your files, rsync/scp/sftp them over.
Read only snapshots on the rsync.net side means even an attacker can't just delete all your previous backups.
Make sure you check the status of backups, I send journald and syslog stuff to papertrail and have email alerts on failures.
I manually verify the back-ups at least once a year, typically on World Back-up Day 
 https://papertrailapp.com/ http://www.worldbackupday.com/en/
Stupid simple and stupid cheap. Install, select directories you want backed up, set it and forget it.
All for $7.00 a month.
I just use a simple scheduled AWS lambda to PUT to the redeploy webhook URL.
I use an IAM role with put-only permissions to a certain bucket. Then, if your box is compromised, the backups cannot be deleted or read. S3 can also be setup to automatically remove files older than X days... Also very useful.
Then the script sends it to s3 using aws s3 sync. If versioning is enabled you get versioning applied for free and can ship your actual data and webdocs type stuff up extremely fast and it's browsable via the console or tools. Set a retention policy how you desire. Industry's best durability, nearly the cheapest too.
I can't praise restic enough. It's fast, secure, easy to use and set up (golang) and the developer(s) are awesome!
Use pg_dump and tar then just s3cp
All the databases and other data are backed up to s3. For mysql, we use the python mysql-to-s3 backup scripts.
But the machines themselves are "backed up" by virtue of being able to be rebuilt with saltstack. We verify through nightly builds that we can bring a fresh instance up, with the latest dataset restored from s3, from scratch.
This makes it simple for us to switch providers, and can run our "production" instances locally on virtual machines running the exact same version of CentOS or FreeBSD we use in production.
If you're not using a modern Unix variant with ZFS... well there isn't a good reason why you would be.
You can also use https://r1softstorage.com/ and receive storage + R1soft license (block based incremental backups) -- or just purchase the $5/month license from them and use storage where you want.
What tutorials and books? First off I totally get you. For several years after graduating I felt a hole in the pyramid of knowledge I felt university should have provided me. Our program leaned heavily on how to use Java and Microsoft technologies to fix problems big companies had. There was little room to stretch our foundation and dive deeper into algorithms or understanding programming without a language or framework attached to the material.
Ive been fixing this by reading books and doing simple projects to fill in that base layer of knowledge in that pyramid. These dont really dive into frameworks or even languages, but the basic building blocks of what we do.
Being effective with languages like Java or frameworks like the Android SDK is nice. But I know for myself and many people that feel a tinge of imposter syndrome that its due to lacking foundational knowledge. We either rushed through this period or skipped it entirely. But its this through this period where we develop on confidence with our craft.
Theres plenty of Ask HN threads on what to read to develop a good baseline of programming knowledge (SICP, Code Complete 2 and Pragmatic Programmer will be mentioned a lot). What I think is important is also to have a clear goal or reason for wanting to read a tutorial or book and only follow through on material that actually helps you accomplish your goals. Assume most tutorials and books are fluff that will not actually move the needle for you.
Do it slow and methodically. Don't try to cram to fill all the holes at once. Go slow. Identify one hold and learn how it is filled. Do examples, write a small program to get practice. Ask someone to review your code.
Programming now-a-days is a marathon, not a sprint. Programmers need a pretty deep understanding of their language of choice along with how to use it correctly. I think the last piece lacks in a uni education alone.
Practice, practice, practice. I don't know java or I would offer to help. If you get around to C or C++, email is in my profile.
It was developed by Google, so you know it'll cover almost everything and give you best practices approach to developing android apps. It's also well structured and can be done in your free time.
If you don't want to pay for the nanodegree, you can also take the courses individually for free (without getting credit).
The best thing you can do is keep programming and aim for best practises. Ask questions on stackoverflow, programmers stackexchange and codereview.stackexchange.com
I would probably recommend studying individual classes of algorithms, and to only move on when you feel ready, as opposed to learning algorithms in ascending difficulty (at the risk of learning them in a haphazard fashion).
VisuAlgo is another cool site that has lots of algorithm visualizations...http://visualgo.net
And, if you can handle the dude's voice, I recommend checking out Xoax.net's algorithm videos...http://xoax.net/comp_sci/crs/algorithms/index.php
What you will probably find is that it's more valuable to gain experience designing your own algorithms using tried-and-true techniques such as dynamic programming, greediness, divide-and-conqur, linear programming, etc. Also keep in mind that data structures are closely linked to algorithms, and vice versa. If you are not familiar with big-O notation I suggest you begin there as it can be used as a measure of both an algorithm's time complexity and its data complexity.
I have to question the value of only focusing on learning algorithms and on the idea of optimizing the quantity.
In terms of learning lots of them, it might be more useful to focus on learning more fundamental algorithms _better_ rather than tons of them. Or you might want to carefully select the most generally useful algorithms or ones in a specific field relevant to current projects.
Also, now that we have such powerful general purpose languages and efficient module versioning and distribution, learning to take advantage of those probably has more practical use.
For example, you could spend several weeks or years learning various statistical methods and algorithms for machine learning in a particular area. But then you realize that all of the algorithms are already implemented in python code libraries so you start learning how to apply the libraries in real code for applications rather than reimplementing the libraries.
But then you find out that deep learning techniques far outperform all of those algorithms you learned to implement and then apply via those libraries.
So then you train yourself on sophisticated deep learning techniques and start to implement LSTM in python. Then you realize you never quite got the fundamental understanding of neural networks so go back to work on learning that better.
Then you implement some core neural network algorithms in python and start to build back up to your LSTM implementation. Now you find out that TensorFlow exists but lacks good support for AMD which your university has (perhaps erroneously) made a large investment in.
So then you decide the best thing to do would actually be to try to fix some basic bugs that occur on your platform with the latest TensorFlow/OpenCl/AMD code (or whatever).
You manage to fix one of the minor issues and now several geniuses have their day improved by a bit or two.
The point is, trying to learn a ton of random algorithms in a short period probably isn't the best use of your time.
You can't. You may be able to consume the knowledge underpinning an algorithm and parrot it back but any attempt to learn it in one day is doomed to failure. Parrot knowledge has zero retention.
I guess you can also try your hand at CodinGame's puzzles ( https://www.codingame.com/training ) as they also involve known algorithms and they are realy fun to play.
But ultimately, both of these resources won't teach you how to implement algorithms.
Make something to solve a real problem every day of your life and you'll be far better at solving problems then other people. I'd rather be able to do that then just parrot back sorts, graph traversals, and what not.
The problems range in difficulty and for many the experience is inductive chain learning. That is, by solving one problem it will expose you to a new concept that allows you to undertake a previously inaccessible problem. So the determined participant will slowly but surely work his/her way through every problem.
Pretty much in the beginning of translation to English, but the original resource in Russian is a trove of information on algorithms. Suits well for the "one also a day" learning format.
https://www.hackerrank.com/ has a lot of great algorithm challenges. They won't teach you how to do it but you need to learn the algorithms to solve the problems.
Jeff Atwood aka CodingHorror (of Stackoverflow and Discourse fame) recommended this book strongly in this post titled "Practicing the Fundamentals: The New Turing Omnibus": https://blog.codinghorror.com/practicing-the-fundamentals-th...
It's old but concise and very much to the point. All of the material is highly practical.
 http://algorithm.wiki/ https://news.ycombinator.com/item?id=12670674
Would love to hear if this is helpful to you.
If you are just learning programming, plan on taking your time with the algorithms but practice coding every day. Find a fun project to attempt that is within your level of skill.
If you are a strong programmer in one language, find a book of algorithms using that language (some of the suggestions here in these comments are excellent). I list some of the books I like at the end of this comment.
If you are an experienced programmer, one algorithm per day is roughly doable. Especially so, because you are trying to learn one algorithm per day, not produce working, production level code for each algorithm each day.
Some algorithms are really families of algorithms and can take more than a day of study, hash based look up tables come to mind. First there are the hash functions themselves. That would be day one. Next there are several alternatives for storing entries in the hash table, e.g. open addressing vs chaining, days two and three. Then there are methods for handling collisions, linear probing, secondary hashing, etc.; that's day four. Finally there are important variations, perfect hashing, cuckoo hashing, robin hood hashing, and so forth; maybe another 5 days. Some languages are less appropriate for playing around and can make working with algorithms more difficult, instead of a couple of weeks this could easily take twice as long. After learning other methods of implementing fast lookups, its time to come back to hashing and understand when its appropriate and when alternatives are better and to understand how to combine methods for more sophisticated lookup methods.
I think you will be best served by modifying your goal a bit and saying that you will work on learning about algorithms every day and cover all of the material in a typical undergraduate course on the subject. It really is a fun branch of Computer Science.
A great starting point is Sedgewick's book/course, Algorithms . For more depth and theory try , Cormen and Leiserson's excellent Introduction to Algorithms. Alternatively the theory is also covered by another book by Sedgewick, An Introduction to the Analysis of Algorithms . A classic reference that goes far beyond these other books is of course Knuth , suitable for serious students of Computer Science less so as a book of recipes.
After these basics, there are books useful for special circumstances. If your goal is to be broadly and deeply familiar with Algorithms you will need to cover quite a bit of additional material.
Numerical methods -- Numerical Recipes 3rd Edition: The Art of Scientific Computing by Tuekolsky and Vetterling. I love this book. 
Randomized algorithms -- Randomized Algorithms by Motwani and Raghavan. , Probability and Computing: Randomized Algorithms and Probabilistic Analysis by Michael Mitzenmacher, 
Hard problems (like NP) -- Approximation Algorithms by Vazirani . How to Solve It: Modern Heuristics by Michalewicz and Fogel. 
Data structures -- Advanced Data Structures by Brass. 
Functional programming -- Pearls of Functional Algorithm Design by Bird  and Purely Functional Data Structures by Okasaki .
Bit twiddling -- Hacker's Delight by Warren .
Distributed and parallel programming -- this material gets very hard so perhaps Distributed Algorithms by Lynch .
Machine learning and AI related algorithms -- Bishop's Pattern Recognition and Machine Learning  and Norvig's Artificial Intelligence: A Modern Approach 
These books will cover most of what a Ph.D. in CS might be expected to understand about algorithms. It will take years of study to work though all of them. After that, you will be reading about algorithms in journal publications (ACM and IEEE memberships are useful). For example, a recent, practical, and important development in hashing methods is called cuckoo hashing, and I don't believe that it appears in any of the books I've listed.
 Sedgewick, Algorithms, 2015. https://www.amazon.com/Algorithms-Fourth-Deluxe-24-Part-Lect...
 Cormen, et al., Introduction to Algorithms, 2009. https://www.amazon.com/s/ref=nb_sb_ss_i_1_15?url=search-alia...
 Sedgewick, An Introduction to the Analysis of Algorithms, 2013. https://www.amazon.com/Introduction-Analysis-Algorithms-2nd/...
 Knuth, The Art of Computer Programming, 2011. https://www.amazon.com/Computer-Programming-Volumes-1-4A-Box...
 Tuekolsky and Vetterling, Numerical Recipes 3rd Edition: The Art of Scientific Computing, 2007. https://www.amazon.com/Numerical-Recipes-3rd-Scientific-Comp...
 Vazirani, https://www.amazon.com/Approximation-Algorithms-Vijay-V-Vazi...
 Michalewicz and Fogel, https://www.amazon.com/How-Solve-Heuristics-Zbigniew-Michale...
 Brass, https://www.amazon.com/Advanced-Data-Structures-Peter-Brass/...
 Bird, https://www.amazon.com/Pearls-Functional-Algorithm-Design-Ri...
 Okasaki, https://www.amazon.com/Purely-Functional-Structures-Chris-Ok...
 Warren, https://www.amazon.com/Hackers-Delight-2nd-Henry-Warren/dp/0...
 Lynch, https://www.amazon.com/Distributed-Algorithms-Kaufmann-Manag...
 Bishop, https://www.amazon.com/Pattern-Recognition-Learning-Informat...
 Norvig, https://www.amazon.com/Artificial-Intelligence-Modern-Approa...
They'll give you all of that.
It's had good Linux support for a while now.
For "laughing at ourselves" and oddities of computer languages, there is "Wat" by Gary Bernhardt:https://www.destroyallsoftware.com/talks/wat
For an opinion on the Sun to Oracle transition, there is "Fork Yeah! The Rise and Development of illumos" by Bryan M. Cantrill, Joyent. His Larry Ellison rant makes me smile:https://youtu.be/-zRN7XLCRhc?t=33m00s
Another fantastic one is Steve Jobs' 2005 commencement address at Stanford:
Bryan Cantrill's 2011(?) Lightning talk on ta(1). It's fascinating, but it also shows you just long-lived software can be.
Randall Munroe's Talk on the JoCo cruise. Because it's effing hilarious, and teaches everybody the important art of building a ball pit inside your house.
Finally, an honorable mention to three papers that don't qualify, but which I think you should read anyway.
Reflections on Trusting Trust: This is required reading for... Everybody. It describes a particularly insidious hack, and discusses its ramifications for security.
In the Beginning Was The Command Line: If you want get into interface design, programming, or ever work with computers, this is required. It's a snapshot of the 90's, a discussion of operating systems, corporations, and society as we know it. But more importantly, it's a crash course in abstractions. Before you can contribute to the infinite stack of turtles we programmers work with, you should probably understand why it's there, and what it is.
Finally, The Lambda Papers. If you've ever wondered how abstractions work, and how they're modeled... This won't really tell you, not totally, but they'll give you something cool to think about, and give you the start of an answer.
Growing a Language by Guy Steele.
Really set me on a path of re-examining older ideas (and research papers), for applications that are much more contemporary. Absolute stunner of a talk (and the whole 70's gag was really great).
"What would be really sad is if in 40 years we were still writing code in procedures in text files" :(
"Ask HN: What are your favorite videos relevant to entrepreneurs or startups?" -> https://news.ycombinator.com/item?id=7656003
"Ask HN: Favorite talks [video] on software development?" -> https://news.ycombinator.com/item?id=8105732
The Coming Civil War over General Purpose Computing by Cory Doctorow http://boingboing.net/2012/08/23/civilwar.html
Cybersecurity as Realpolitik by Dan Geer https://www.youtube.com/watch?v=nT-TGvYOBpIhttp://geer.tinho.net/geer.blackhat.6viii14.txt
Discovering Python (David Beazley)
David finds himself in a dark vault, stuck for months sifting through deliberately obfuscated pile of old code and manuals. All seems lost, but then he finds Python on a vanilla Windows box.
Fork Yeah! The Rise and Development of Illumos (Bryan Cantrill)
History of Illumos, SunOS, Solaris, the horribleness of Oracle
These are not technical, but they are entertaining.
We can argue on some of the points he makes but we can all agree that the demos are very impressive.
1) Alan Kay: Is it really "Complex"? Or did we just make it "Complicated"https://www.youtube.com/watch?v=ubaX1Smg6pY
Take note that he is not giving the talk using Window & PowerPoint, or even Linux & OpenOffice. 100% of the software on his laptop are original products of his group. Including the productivity suite, the OS, the compilers and the languages being compiled.
2) Bret Victor: The Future of Programminghttps://www.youtube.com/watch?v=IGMiCo2Ntsc
It's a terrific window into the future of web application development.
Carmack's talk about functional programming and Haskell -- https://www.youtube.com/watch?v=1PhArSujR_A
Jack Diederich's "Stop Writing Classes" -- https://www.youtube.com/watch?v=o9pEzgHorH0
All with a good sense of humor.
It's about much more than games. To me, it's about identifying and not doing unnecessary work.
The second half of this video is a Q&A session, which I would skip.
How I met your girlfriend: https://www.youtube.com/watch?v=O5xRRF5GfQs&t=66s
I love everything about this talk. It walks you through building a lexer from scratch in a simple and elegant way, through a very interesting use of coroutines. I appreciate the bits of humor in the talk as well.
I think it is so easy for us to discuss the impact of big data and quickly get into the weeds, but I think in this talk Norvig does an especially great job in making you truly appreciate the seismic impact that the availability of massive quantities of data can have on your way to think about problems. This is one of the first things I ever saw of him, and I've been in love ever since.
I'd mention Bret Victor's work before (maybe Drawing Dynamic Visualizations?), but Bret cheats by writing a lot of amazing code for each of his talks, and most of the awesome comes from the code, not his (great nonetheless) ability as a speaker.
Then you have John Carmack's QuakeCon keynotes, which are just hours and hours of him talking about things that interest him in random order, and it still beats most well prepared talks because of how good he is at what he does. HN will probably like best the one where he talks about his experiments in VR, a bit before he joined Oculus (stuff like when he tried shining a laser into his eyes to project an image, against the recommendations of... well, everyone): https://www.youtube.com/watch?v=wt-iVFxgFWk
"Writing A Thumb Drive From Scratch" by Travis Goodspeed - https://www.youtube.com/watch?v=D8Im0_KUEf8&nohtml5=False
Excellent talk on the hardware side of security, goes into some really cool theoretical hard disk defense stuff, incredibly insightful and introduces a hardware security tech toy so fun you'll want to go out and order it the moment you're done watching. The speaker is entertaining as all heck to boot.
"Programming and Scaling" by Alan Kay - https://www.youtube.com/watch?v=YyIQKBzIuBY&nohtml5=False
Interesting talk on the theoretical limits of code size and engineering versus tinkering. Also talks a lot about Alan Kay's philosophy of computer science which analogizes systems to biological systems, which are the systems with the largest proven scaling on the planet.
"The Mother Of All Demos" by Douglas Engelbart - https://archive.org/details/XD300-23_68HighlightsAResearchCn...
This talk is so prescient you won't believe your eyes. Given in 1968, Douglas demonstrates just about every major computing concept in use today on a modern machine, along with some ones that are still experimental or unevenly distributed such as smooth remote desktop and collaborative editing.
I think this can really really change how we look at everyday programming tasks everywhere from the type of tooling we choose to how we approach problems.
I especially like the part in the middle where he tells the story of how a an awful GNOME applet was killing a Sun Ray server, and how he tracked down the culprit with DTrace.
not a high tech talk, or particularly technically complex, but it shows a common blindspot in a way that is both clear, enlightening and frightening.
This was the first time I watched pg give a talk. It was the talk that brought about the biggest change in the way I think about the world, my ambitions. The talk was the beginning, reading more about pg, I came across his essays and then HN.
Detailed discussion of how to get the most out of your memory cache and memory bandwidth, focusing on games development. It's full of examples of how understanding both the problem and the hardware, and working in a straightforward way, can give you huge performance gains over using poorly suited abstractions. It shows how low level thinking is still important even with modern compilers. I recommend people interested in performance optimization watch it.
The title says it all. It's really a summary of several software systems with good ideas abound. I believe all the software is 80s or prior.
Edit: I also forgot to mention some psychology and math.
It's what I direct non-technical people to when they ask what the big deal about internet privacy is.
Something more recent:Martin Fowler's great introduction to NoSQL: https://youtu.be/qI_g07C_Q5INot so technical, this is a great overview of the reasons why (and when) NoSQL is valuable. He crams a lot into a short speech, so it's one of the rare videos I've required students in my database classes to watch.
Now, really getting away from the technical, I have to recommend watching the IDEO shopping cart video: https://youtu.be/taJOV-YCieIThis is the classic introduction of Design Thinking to the world, in 1999. If you're using the Lean Startup or an Agile method, but have never heard of IDEO's shopping cart, you may be able to get along fine at work, but you should be kind of embarrassed like a physicist who's never read Newton.
I love his talks for a few reasons:
1. He's anti-hype 2. He's contriversal 3. He's right.
Related slides: http://static.googleusercontent.com/media/research.google.co...
Sussman goes over some interesting ideas on the provenance of calculations and asserts that "exact" computation is possibly not worth the cost.
"What the heck is the event loop anyway?" by Philip Roberts
Great talk about BBC micro and much more
3Matt Adereth - Clojure/typing
History of keyboards and a custom keyboard written in Clojure
I like the 3 for their content and how each speaker presented the background and their project/hack/ideas.
How To Design A Good API and Why it Matters  The Principles of Clean Architecture  The State of the Art in Microservices by Adrian Cockcroft  "The Mess We're In" by Joe Armstrong 
It's mostly about the history of HCI up to that point.
The best practical talk is of course this:
https://www.youtube.com/watch?v=asLUTiJJqdE - Robert "Uncle Bob" Martin, Clean Architecture and Design
Aside from the comedic aspect (which makes the talk incredible), Mickens is a genuinely brilliant thinker and has a marvelous way with words.
Bret Victor - Inventing on Principle
Philip Roberts: What the heck is the event loop anyway? | JSConf EU 2014
InfoSec talk. Best lines from talk..
"Basic lessons are not learned such as know thy network"
"You have to learn your network, you have to have skin in the game"
"Defense is hard, breaking stuff is easy"
"If you serve the God's of compliance you will fail"
"Compliance is not security"
"Perfect solution fallacy"
"People are falling over themselves not to change, shooting great ideas down."
"Perfect attacker fallacy, they don't exist, they are a myth!"
"Attackers are not that good because they don't need to be that good."
Speaker is Eric Conrad
It's fairly high level, but he really burrows into computer history and it's simply fascinating to watch, helped by the fact the person is extremely passionate about what he does https://www.youtube.com/watch?v=gB1vrRFJI1Q&list=PLbBZM9aUMs...
Watching that talk brought me over to the "a picture or a few words per slide" style of presentation, rather than the "wall of bullet points" style. It also helped me move from "stop talking, change slides, start talking again", to smooth transitions while talking.
...very inspiring if you're bored with the way websites have been looking for the past few years.
Explains a lot of recent mass-market innovations that keep the semiconductor manufacturing industry rolling, and goes into detail about the many tricks used to ensure scaling down to the 22nm node.
 https://vimeo.com/36579366 https://www.youtube.com/watch?v=cN_DpYBzKso
It's well worth watching if you are interested in vms at all.
The simple and followable progression to more and more complex ideas blows my mind every time.
> Visualizing Algorithms A look at the use of visualization and animation to understand, explain and debug algorithms.
I like how this talk cuts through a lot of the BS in security. One of his points is that the US and other rich Western countries have a lot more to lose from a possible "cyber war" than our potential adversaries do.
Another key point is that we'll never make much progress unless we can somehow start building better systems in the first place, with fewer vulnerabilities for an adversary to exploit.
I think the second point has become a lot more widely accepted in recent years since McGraw started giving this talk. Unfortunately it sounds like a lot of government folks still haven't got the memo on point #1.
Jake Appelbaum's Digital Anti-Repression Workshop is de rigeur listening too:
Humour, serious technical insight and a good reminder of why being a generalist is an advantage.
Great overview of value types, performance and how hardware that runs things still matters.
Scott Meyers' talks are fun to watch too.
A fascinating tale about using python during the discovery phase of a trial. Very fun watch. Anything by David Beazley is great!
He is kinda awesome in Herzog's recent 'Lo and Behold' too.
If you are in for something out of the ordinary.
I like it because it is the intersection of so many things. He starts slow, is very intimidated by the audience. The audience, obviously super skeptical of the clown from that 70s show giving any useful information, they could learn from. He finds his footing with a great morivational story (albeit laden with a few cliches) about a forgotten entrepreneur and how he built some lasting value.
For me, this is a great talk. The story is extremely motivational and has some interesting bits of history & entrepreneurial genius-- but the entire experience is extremely educational. About bias, drive & success.
I liked it for what it wasnt.
How Google backs up the internet.
At the time it changed how I thought about backups/reliability.
D10 conference - Steve jobs and Bill gates - https://www.youtube.com/watch?v=Sw8x7ASpRIY
TED talk - Bill gates (Innovation to Zero) - https://www.youtube.com/watch?v=JaF-fq2Zn7I
The talk is about how Damien quit his job to hack on open source software. It shows his struggle and doubt while embarking on the project and then finally invented CouchDB. It's a passionate and human account of the process of creating something significant. I recommend every hacker watch this.
Anything at all by Richard Feynman:-https://www.google.co.uk/search?q=%22richard+feynman%22&tbm=...
"The Science of Insecurity" by Meredith L. Patterson and Sergey Gordeychik (2011)
Warning: speaker likes to use profanity (which I enjoy :) but possibly NSFW if you're not on headphones
The rest of his channel is full of his talks https://vimeo.com/channels/761265
One of the best talks about code reviews and similiar things
Guy Steele's How to Think about Parallel Programming: Not! at Strange Loop 2011: https://www.infoq.com/presentations/Thinking-Parallel-Progra...
Any of Jason Scott's talks given at various hacker cons are usually historically informative and always a lot of laughs (but they're decidedly not "technical").
"LoneStarRuby 2015 - My Dog Taught Me to Code by Dave Thomas" - https://www.youtube.com/watch?v=yCBUsd52a3s
"GOTO 2015 Agile is Dead Pragmatic Dave Thomas" - https://www.youtube.com/watch?v=a-BOSpxYJ9M
Not a technical deepdive, but entertaining.
It completely changed the way I approach front-end development (Not that talk in particular though. I saw an earlier, similar talk on Youtube but this one has much higher quality).
It's worth joining a global-scale tech company (AWS, Google, Azure, Facebook) just to have your mind blown by some of the internal materials.
He was a co-speaker at TEDxGlasgow with me and I thought his talk was brilliant. Cyber-crime is a really interesting area.
A deeply thoughtful discussion of the impact of metaphors on how we think about software development.
Skip to 0:40 if you don't want to hear the MC.
For those how likes computer graphics (or want to learn), this is a gold piece.
(Plan to organize and add more categories.)
This guy is just too funny.
It completely changed my perspective on how design shapes our world.
edit: +Ryan Dahl
So many lessons in short, beautiful piece.
Not sure if it's my favorite. And the subject is more technology than "tech". But the talk that keeps haunting me is Michael Dearing's lecture from the Reid Hoffman "Blitzscaling" class at Stanford:
Heroes of Capitalism From Beyond The Grave
Dearing draws upon an obscure letter by Daniel McCallum, superintendant of the New York and Erie Railroad, written to his bosses in the 1850s. In the report, McCallum bemoans the stress and frustration of operating a railroad system spanning thousands of miles. All of the joy and magic he used to revel in whilst running a fifty mile stretch back in his home town has long since dissipated. Furthermore, the unit cost per mile seems to be exploding rather counter-intuitively!
Dearing goes on to elucidate the absolute necessity of the railroads ("the thing to know about the railroads is: they were startups once") themselves. As guarantors of civilization and progress. Beacons bringing light and reason to the dark swamps of ignorance and inhumanity. And not just in the physical transport of goods, people and ideas across the continent. But as the wealth created from that creative destruction remains the best cure for all of our other inimical maladies: poverty, injustice, disease and stagnation.
So, no pressure. But civilization depends upon you!
Links to References in the Talk:
Estimates of World GDP: From One Million BC to the Present
The Process of Creative Destruction by Joseph Schumpeter
The Visible Hand: The Managerial Revolution in American Business by Alfred D. Chandler, Jr.
Report of D. C. McCallum to the stockholders of the New York and Erie Railroad
Things As They Are In America by William Chambers
It just tracks the last IP address, URL requested, and time of entry. Two tables, increments visits if IP is already in database.
You just include this file at the top of your page assuming you use PHP
I've let this thing run for a while (months) and have thousands of visits but often they are just crawlers if uou check on ip-lookup.net
There is something special about being able to create a helloworld.php and have it sit there up and running with reasonable performance without issues so you can forget about it.
Wait until you outgrow it and then consider something else.
I regret wasting so much time (and trust me I'm no noob in this) setting up boilerplate dev environments file watchers transpilers hot module reload nginx reverse proxy server-side rendering server REST API layer client side routing graceful reloading blah blah blah.
Drop a few php files under Apache and keep marching forward.
Why do I need a 'stack' for a personal project ? Also, a weekend-or-two to set-up ?!? If it takes longer than 30 minutes to get going, it's not going to happen.
I recently found out about http://www.ninjaframework.org/ which makes the process even faster.
In general pick the tools you're better at.
Or if I don't need anything dynamic, Hakyll (Pandoc integrated!), and GitLab Pages (automatic CI deploy via any docker instance from git push).
Note that "incognito window" is one of the "standard workarounds" 'dang mentions in that thread.
Paywalled mass-media articles (e.g. WSJ) are very rarely worth submitting. Articles in paywalled journals (e.g. Nature) where the abstract is accessible may well be worth it. But it comes down to judgement.
Finally, I agree that (for the type of topics that HN concerns itself with) free access to information should be encouraged.
The question boils down to whether the paywall is leaky enough. The "web" option, which helps the user find the article via Google because the WSJ paywall let's through the Google-referer, still works for me and many others, but apparently, not for other users. That's a strange technical quirk. I've tried emulating it on desktop vs. mobile, and using a VPN for different parts of the world, and the Google-referer-workaround still works fine for me.
So why can't some users get it to work? Could they be using a plugin that blocks the referer? Is the use of such a plugin enough of a common-case to block good journalism for the rest of the users on HN?
If a group of people at a party were talking about a book you had not read or a movie you had not seen, would that be breaking your party experience?
Of course not. You'd go converse with a different group that was talking about some other book or movie, or talking about sports or something.
You can do the same thing here. You have 30 submissions on the front page alone to choose from, and even more if you can bring yourself to hit the "more" link at the bottom of the page.
And unlike the book/movie discussion at a party, if you do go into the comments on an article you have not read you are unlikely to get any spoilers that will ruin it for you if you do later find the article somewhere you can read.
> An alternative like automaticly hiding articles from wsj.com would be nice, but i think it's more effectively to just ban the domain? Because it has no use for many HN-readers.
Every highly technical article discussed on HN is of no use to many HN readers. Do you think we should ban those, too?
Also, the utility of HN submissions is usually in the comments, not the article itself. The comments are usually quite useful even without reading the article. The article is merely a launching point.
I do agree that inaccessible sites are of little value for discussions and would gladly have a visual indicator of these sites to avoid the click, close, flag response.
HN already replaces article URLs with better ones, so the above will work through the old process with an additional parameter for what's considered "better" for HN.
And the comments on HN seem to be more coupled to an event than any given particular article, meta-metadiscussion aside.
A summary will also help with paywalled articles.
So this discussion is great - lets make sure everyone takes the time to give it thought. But after those thoughts have had time to percolate, the actions of the community will self-correct. Or not.
According to me, this should be a top discussion. But the ranking algorithm seems to be way off, like we have been punished in the algorithm.
Any thoughts what this could be?
I personally agree with the current HN paywall policy. If the Google workaround doesn't work, then WSJ will get banned from Google, which is a far harsher penalty than getting banned from HN.
The WSJ paywall is not easily bypassable. The usual techniques to bypass paywalls are inconsistent with WSJ. Sometimes opening the 'web' link in an incognito window works, sometimes it doesn't. When it doesn't work, there's no way to get to the article.
The WSJ paywall should not be treated like the NYT paywall. It's a different animal, and it shouldn't be allowed here because it fails the easily-bypassable test.
Let's also extend this to companies that prevent those with content blockers from viewing their pages. Forbes is one, and techcrunch is another. Techcrunch doesn't block content, but their site UI is messed up enough that when content blockers are used that it makes their site unusable.
But none of this is actually going to teach you the skill of inquiry and skeptically reading different competing historical narratives. You kinda do need a class for that. A friend of mine is building a startup to make running one easier: https://www.beaglelearning.com/
 https://www.youtube.com/watch?v=Yocja_N5s1I&list=PLBDA2E52FB... , https://www.youtube.com/playlist?list=PL8dPuuaLjXtMwmepBjTSG... , and https://www.youtube.com/playlist?list=PL8dPuuaLjXtPNZwz5_o_5... https://www.youtube.com/watch?v=EbBHk_zLTmY&index=1&list=PLh...  https://www.youtube.com/playlist?list=PLB2vhKMBjSxMK8YelHj6V...
> Youre going to see three types of people in your interviews. At one end of the scale, there are the unwashed masses, lacking even the most basic skills for this job. They are easy to ferret out and eliminate, often just by asking two or three quick questions. At the other extreme youve got your brilliant superstars who write lisp compilers for fun, in a weekend, in Assembler for the Nintendo DS. And in the middle, you have a large number of maybes who seem like they might just be able to contribute something. The trick is telling the difference between the superstars and the maybes, because the secret is that you dont want to hire any of the maybes. Ever.
That one essay seems to have spawned a major fear in the industry of hiring someone who you might have previously taken a chance on. In an attempt to prevent what Joel warned us about all those years ago, the interview ritual has increased in complexity. We've since been advised that the coding homework and the whiteboard implementation of FizzBuzz are mandatory, and they've swept the industry.
But companies insisting on quizzes instead of looking at free software projects you have is complete bullshit. It means they are not interested in your coding skill but instead are looking for something else.
It could be that they want to see you under stress and think that they can deduce some valuable information from that. Like if you lose your cool it means you are unstable. If you don't talk through the interviewers while solving the puzzle it means you are not a "communicative" person.
Or it could be that they have no idea if the test they are handing out is working or not. They need to calibrate it by running it through a hundred candidates so they can see what the mean and median scores to even know if someones test result is good or bad.
Just to be clear, I think everyone should be able to pseudo code FizzBuzz or strlen() in an interview because it is very simple and every engineer should be able to solve it in 10 minutes. But the tests I've been subjected to have been much more contrived. Like long multi-choice questionnaires or take-home coding projects that took many hours to complete.
If interviewers insist on me doing such tests I now refer them to my github profile instead. If they don't accept that as substitute for taking the test then the job probably wasn't for me anyway.
On the flip side I can sort of understand. I actually interviewed today. They had from what I saw 5 people interviewing today. 30 minutes a candidate, with 6 employees screening. Imagine how much source code they would have to review. In addition correlating that to a specific candidate.
Interviewing is an art. I think we're still ironing out the best way. The first person a director had marked the heck out of my resume and highlighted it. He knew what he wanted to ask, yet he let me lead the conversation.
When I lead interviews I asked basic syntax questions. Then what data structures you would use. Then the bulk was whatever was bothering me. I would treat the candidate like a co-worker. Come to them for a sanity check, am I insane is there a better way. I'll denote this only works if they're comfortable with you, they need to feel like your team mate. People hated me because id go over time limits....
I have been searching for the past four months. I get home I hit hacker rank or study. To say the girlfriend is unhappy is an understatement.
So these coding tests, are not fun. A lot of people have trouble with them. But you can work on them. After one phone screen, the interviewer asked are you done. I said hang on a sec. I reviewed my code and added exception handling, and fixed several syntax errors. That mindfulness helped alot.
Today I got to the ux ui director. They asked to see a prior project. Then engaged me about my design decisions. I essentially got a free consultation and it was amazing.
I'm long winded sorry :/. I'll close with this. I do dance improv, poetry slams, and open mics. I have to practice for each. It took ages to memorize a poem, and choreograph it. The interview is your audition. You have to know their script. Know their lines. Your going for the lead role, and you have got to know how to mesh with your partner. Bust your ass, it sucks but get the role and enjoy yourself.
I only ask because until recently I'd never written a FizzBuzz program. I've seen it mentioned so many times that I thought I'd better give it a try.
I think you're probably using "FizzBuzz" as a euphemism for abstract coding challenges. Could you give some examples of the problems you are being set?
Ideally, as a candidate, you'd go and work at a company for a short period, and once you can evaluate what it's actually like there and they have a chance to evaluate your work, then you would have a followup interview to determine whether to go ahead (and if so negotiate terms) or call it off. But that doesn't work well in our economy or with the way our companies are structured. So we're stuck with speed-dating.
Due to limited interview time, they throw puzzles at you and try to throw you off guard to see how you react to an unusual situation, and whether you can handle it. How you handle a crisis or bizarro unexpected situation is more important than knowing what you can do under normal circumstances or how you are normally. Not a pleasant answer, but one way of looking at the why.
FizzBuzz is not a puzzle. It's a very straightforward question, there's nothing tricky about it.
Your references are nice, but in many cases there's no easy way to verify that you wrote that code.
Then there's the internal referral. These candidates are pretty rare. The first month you're hired you're likely to suggest anyone you can right then. After that if you're proposing them, you have a vested interest in them being hired.
Then there's the agency candidate. This person has been groomed by the referral agency to answer your questions. Once when I was hiring, we were asking candidates how to build a priority queue (a queue, where higher priority items were processed first, equal priority items in order). We interviewed 50 candidates, and 47 of them answered quickly and confidently that they'd use XML with XPath to find the next item. o.O
There's the open-source committer. I could spend a few hours reviewing your code, but that's time that I could be interviewing someone else, or actually getting work done. But then I need to make sure you didn't plagiarize it from somewhere. It's too easy to run a search and replace on a git history and slam the whole thing up on GitHub. I mean, I guess that shows technical chops, but poor ethics.
There's the long coding challenge. I wouldn't trust that. I've had coworkers actually ask me to do the coding challenge for them, because they didn't have the knowledge. I assumed they ended up getting someone else to do it for them.
Last is the credit-taker. This was me when I was young (we all have a past). I would over-state my involvement in the project, but because I did have a sizable role in the project and I was insatiably curious, I was aware of how the product worked and why design decisions were made. So I was able to answer any question asked by the interviewer. But was I actually able to build what I claimed?
On-the-spot coding challenges suck, but I don't see a better option out there.
Skill lists are almost meaningless. You wouldn't believe how many people claim to know C++ but start writing Java syntax on the board when you ask them to code something.
Basically, the problem isn't you, it's other people. It doesn't matter how good your open source portfolio is; the only 100% reliable way to judge someone's coding ability is to put them on the spot. There are too many "embellishers" in the world.
It's easy, for me at least, to freeze up at any time in that process and stop being able to do anything at all, even if in a normal work setting it wouldn't be a problem. It seems rather ridiculous, or at least frustrating, that the job hinges on that process.
Having a simple challenge (ideally less than an hour) seems appropriate under those circumstances. Ideally you use the simple challenge as a replacement for hours of stressful whiteboarding.
What happens is in some cases people take it too far.
The point of FizzBuzz is a sanity check.
It's like asking a dental surgeon "How many teeth do humans have?".
If they hesitate before answering you don't want them performing surgery on you.
But I guess sometimes people bump the difficulty up step by step until it loses that ability.
As in, a really simple dumb question like FizzBuzz is more valuable because if they fail to do it that's a strong signal that you can depend on.
Sometimes people get greedy and make it more difficult so it loses its value.
I personally suck at "whiteboard" coding too. I'd prefer they leave me in an empty room with a text editor and no internet connection for 10 minutes. But part of the exercise is discussing the problem and or showing your interpersonal skills.
Hopefully you'll find a different employer who interviews in a way better suited to you.
For example, you could explain a problem involving database lock contention and ask the candidate how they would handle structure, indexes and queries to maximise throughput and avoid deadlocks.
Or you could give them an example schema and get them to "spot all the errors" without explaining that an error is anything that isn't in 3NF or higher.
One is going to give you a good understanding of the candidate's knowledge of the subject, the other is going to give you a noisy true/false signal.
The first few questions are weeder questions. I won't stop an interview if they blank on one, because I'll allow for nerves or a general brain fart. But if they blank on say, the first three really easy basic questions, the interview is over. It doesn't happen often, because those people are likely to get weeded out by the phone screen, but it's happened a few times. And it might not be 100% reliable, but it's good enough for my purposes.
I know this is not PC, but coding is not a craft where once you reach a certain level, the rest is polish and experience. Good programming requires a certain virtuosity that not all programmers have (not implying this is genetic, please don't assume I am). People who lack this may produce ok code 90% of the time, but will invariably reach a point where the problem is too hard for them, and they come up with a bad solution.
This applies to working at a big tech company, where all sorts of interesting problems crop up. At an ordinary company or startup, I accept that this might not be so important and maybe these companies are copying the tech company's interviewing style for no good reason. Again, this may not be PC, but people at big tech companies get paid more (even given the location) so I think it's fair to assume their skillset is rarer.
When I interview candidates, I try to mix hard challenges with general coding, design and communications skills. My problems don't usually have a trick that you need to see, and sometimes, like fizzbuzz, they intentionally don't have a clean solution. But my problems are algorithmic in nature. You can see there are some interesting data structures lurking in the background even if they aren't directly applicable.
My reasoning in using these questions is that if a person can't solve a difficult, messy, but well defined problem, then when they encounter such a problem they will be stuck. I know there is a kind of dogma on HN that says that complex problems tend to be a result of programmers not doing the straightforward thing, but my experience is that 10% of the time the straightforward solutions don't work and you need something complex. That is, the flipside of "don't write clever code" is "be clever enough to write the code that is needed". If this sounds arrogant, please bear in mind that it's not usually considered arrogant to say that social skills are important and vary across individuals, so why should coding ability be different?
 - (see this for proof - https://hn.algolia.com/?query=fizzbuzz&sort=byPopularity&pre...)
Everyday HTML/CSS has problems that are more difficult than FizzBuzz. It's not a gotcha question, it's mostly there to see if you have actually written any code or if you are submitting a false resume.
Side story: I have witnessed someone with absolutely no coding experience get hired. He not only lasted, he was considered pretty good. His secret: he used Fiverr and some other services to outsource his work. I have to complement the guy. In the end, he completed his tasks and added business value. He wasn't looking for a career, he was just looking for a job that paid well so he could buy a car and move across country. In the end, no one was hurt and both parties got what they wanted.
EDIT: I'm assuming they literally asked about FizzBuzz. It is literally the apocryphal interview question and just beginning filter to see if the rest of the interview is going to be a waste of both of our time. I would assume that if you hadn't come across FizzBuzz that you have never coded before and/or it that you did no preparation for an interview. It isn't all about the difficulty, but FizzBuzz is almost as ubiquitous as "Hello, world."
EDIT Whiteboard Challenge: That said, I loathe whiteboard challenges during interviews. In the past, I've been asked how would I design a Mars Rover and control it from Earth so that it could complete its mission. I didn't know much about AI or computer vision at the time. However, it was for a mid/Senior level full stack position. I had no idea if this were an actual coding question or if he simply wanted to see how I approach problems. I went on about how I would first upload the most precise map data that we have on Mars for the days journey. Then I would make sure the navigational system was accurate by using onboard cameras. The cameras would be looking at certain topological features and how far away they were. If there were a major sand storm that changed the environment, we'd have a problem Houston. I went on about how the Rover would only be given instructions to move as far as can be seen from the original position since the camera feed was not live, but had a delay due to the speed of light. Next, it'd have sensors to know to go into clamshell or whatever mode if it detects a major sandstorm to protect the fragile instruments onboard. He still said he wanted more, so I totally bullshitted something about whether Mars was in its perihelion or not, I'd make sure the Rover only moved during the day etc.
After about 15 minutes of this, he said he was looking for the Rover to be implemented as a RESTful API and Houston would represent the client. I looked at him quizzically, said that was the worst interview question I've ever heard, and I think we're done here. When I got home, I did some googling and found that he ripped this as an interview question: http://stackoverflow.com/questions/185740/would-you-architec...
Now, I know that Microsoft Robotics Studio uses REST and, although I am well past whiteboard challenges, if anyone asks me to do one, I will politely tell them that its unrealistic and never the way I would first approach a problem since I never write code freehand. I frequently draw diagrams, concepts, actions, etc. on a whiteboard. I would be more than happy to actually sit down in front of a terminal, load up an editor and write code that I can get an actual output from. If you can't, then, from my perspective, you're basically asking me to code with one tied behind my back while blindfolded. If that's what you want, I hope you find it, but I am not the right fit.
Sounds like you've got a professional network that you can use to get you a new job instead of going through the front door with everybody else.
I'm not sure if you'd have legal issues with selling on names unless they've specifically opted in. If not a simpler route to market would be just to bundle the names and sell them as data.
Would you be making sure that the listed names are actually available for work? Or are you simply exporting your LinkedIn contacts?
Also doesn't Linkedin already do this. They have a search engine you can use to filter out applicants based on school, past experience and location. I also believe they released a lite version to make it more affordable.
Some startups you should look at if you're interested in this space: Hired.com, Whitetruffle and Wayup.com (they introduced a way for companies to post requirements and get paid per qualifed applicant)
Edit: I like the idea i just dont think anyone would pay for it.
With the 100 emails in an Excel file approach, I guess most people will just send it to the spam folder.
I'm not sure what you meant by "While their offering is an enterprise product, I liked the product and cold-emailed him seeking the position".
Maybe I'm reading to much into it. But you sound despondent about the prospect about working with an enterprise product.
If that is the case, remember, a job works both ways. It's not fair on yourself or the employer to work for something you're not truly enthusiastic about.
Expect two peers talking shop about the industry. Most likely it will be surface level stuff. Be prepared if conversation goes deep. A lot of guys like the informality of coffee chats hoping to foster a more genial conversation. Expect that he is going to size you up on potential cultural/team fit.
You can craft a great meeting by expressing genuine interest in him as an individual. Read his profile, look for points of connection. Ask: What were the attractors for him to join the company? What are some of the priorities he's facing now? Where are they struggling?
The advantages of meeting over a coffee are that it is quick, you're on roughly neutral territory, and there's an opportunity to feel things out enough to decide whether it's worth taking things to the next level both personally and technically.
Being able to concisely describe what you've done in the past, what you'd like to do in future, and why you approached the firm should cover the bulk of the work content. Having an opinion on related technology issues is good, and I usually ask semi-random questions outside of work stuff too, just to get a feel for the person: nothing too controversial, but just conversational. Even if you're interested in a purely technology role, demonstrating that you can talk to strangers doesn't hurt.
It could be a little as 15-20 minutes; it could last for hours. Be ready for either. CTOs are usually very busy people, so get to your points and don't waffle.
Try to pay, but don't insist. Thank the person for their time. Send a followup thank-you email (and do anything else you said you would too).