Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

 

Books/Resources For Learning CS & Different Languages:

General Resources:
Roadmaps:
Learning to Code: The Roadmap I Wish I Had Been Given
Teach Yourself Programming in Ten Years

Websites:
Codecademy - http://www.codecademy.com
CodingBat - http://codingbat.com/
The New Boston - http://thenewboston.org/
Udacity - http://www.udacity.com/
WiBit.net - http://www.wibit.net/
Misc CS Lectures - http://activities.tjhsst.edu/sct/lectures.php [the few I skimmed through were really helpful]
Great digitized books from the Atari era: http://www.atariarchives.org/
Type faster: http://play.typeracer.com/
Type faster: https://typing.io/

Code schools:
Hacker School (NYC, free)
Dev Bootcamp (SF, CHI, $12k)
Coding Dojo (SF, $10k)

Books:
Great (free) digitized books from the Atari era: http://www.atariarchives.org/
Programming Pearls by Jon Bently
USACO Training Puzzles - rec'd by a Princeton-CS-major-turned-quant friend of mine making $200k a year
Project Euler Puzzles - rec'd by a Princeton-CS-major-turned-quant friend of mine making $200k a year


Amazon List - Graduate CS Books
Amazon List - Books on Algorithms

Computer Architecture
Computer Architecture by Hennessy and Patterson
The Elements of Computing Systems: Building a Modern Computer from First Principles
How Computers Work by Ron White and Timothy Downs

Introductions to Programming
Learn to Program by Chris Pine (uses Ruby)
Harvard's CS 50 (Intro to Computer Science) Course - https://www.cs50.net/lectures/
Amazon Book List - History of Personal Computing Classics
Amazon List - Rec'd Books for Common Languages

Computer Science Ideas:
Foundations of Computer Science by Aho and Ullman - now free online!
- I'm on page 11 of the Chapter 3 pdf, p99 of the book itself. It's been slow-going b/c I want to understand as much of his math notation as possible.

Genetic Programming:
A Field Guide to Genetic Programming
Introduction to Evolutionary Computing
Genetic Programming by John Koza




Assembly

Assembly Language Programming for the Atari Computers
By Mark Chasin
published 1984
http://www.atariarchives.org/alp/








C
The C Programming Language (K&R) - seems to be the hands-down favorite among programmers
Websites:
The C Library Reference
Everything you need to know about pointers
A TUTORIAL ON POINTERS AND ARRAYS IN C

C++
I've heard that you should study C before C++.

Books Rec'd By Professional Programmers:
C++ Primer Plus by Stephen Prata - has the most rave reviews; people say it's the best book for absolute beginners
C++ Primer by Stanley Lippman - reviewers say this is the next book to read after Primer Plus
The C++ Programming Language by Bjarne Strousup - from reviews it sounds like this may be better for advanced users

Books Less Frequently Rec'd by CS Majors:
Beginning C++ Through Game Programming
C++ For Dummies - I thought this book was pretty good, although it got a lot harder once he started talking about pointers. It doesn't have great reviews, but you can get it for like $4.01 (including shipping), so the risk/reward still seems in favor of checking it out.

Websites:
Marshall Cline's C++ FAQ - http://www.parashift.com/c++-faq-lite/

Forums:
cplusplus forums - http://www.cplusplus.com/forum/ (seems pretty active)

CSS
CSS: The Missing Manual - sort of rec'd by the creator of railstutorial.org

HTML
http://headfirstlabs.com/books/hfhtml/ - sort of rec'd by the creator of railstutorial.org

iPhone apps
http://www.guardian.co.uk/technology/gamesblog/2009/feb/10/gameculture-apple
http://www.daleisphere.com/iphone-app-development-where-to-start/

Javascript:


http://www.jshint.com/
Quora on Javascript's Importance

Human JavaScript
http://read.humanjavascript.com/
- rec'd by Christian O. at Inf.

Processing
http://www.learningprocessing.com/





Machine Language

Machine Language For Beginners
by Richard Mansfield, published 1983
http://www.atariarchives.org/mlb/






Python
Online Stuff:
Dive Into Python (online book) -
http://www.diveintopython.net/toc/index.html
Google - 2 Day Intro-To-Python Class
Khan Academy - Computer Science (uses Python)
The New Boston - http://thenewboston.org/list.php?cat=36 - I'm on #27
Ebook - Learn Python the Hard Way - http://learnpythonthehardway.org/

Books:
Practical Python: Learn Programming For the Real World!

Advanced:
A long blog-post on the problems of PHP - http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/
a response to that blog post - http://blog.ircmaxell.com/2012/04/php-sucks-but-i-like-it.html
Advanced Python Performance Tips - http://blog.explainmydata.com/2012/07/expensive-lessons-in-python-performance.html


Ruby:

Wicked Good Ruby 2013 - Wicked Bad Ruby by Matt Aimonetti
http://www.youtube.com/watch?v=VO-NvnZfMA4

http://createdbypete.com/articles/ruby-on-rails-development-with-mac-os-x-mountain-lion/
http://www.smashingmagazine.com/2009/04/26/five-reasons-why-designers-are-switching-to-mac/
https://groups.google.com/forum/#!topic/rubyonrails-talk/xJeOXnNArzI

Online Guides:
Why's (Poignant) Guide to Ruby
Learn to Program by Chris Pine
What Is Ruby? by Matz (creator of Ruby)

Books:
Learn to Program by Chris Pine (uses Ruby) [there's a free online version]
- mentioned in Why's guide
Programming Ruby by Dave Thomas
- mentioned in Why's guide
Beginning Ruby
- rec'd by the creator of railstutorial.org (search the guide)
Exploring Everyday Things with R and Ruby
- this looks cool


Ruby on Rails:
http://ruby.railstutorial.org/ruby-on-rails-tutorial-book
- rec'd by a stanford grad who's worked for a startup


Good Explanations of General CS Topics:

http://cslibrary.stanford.edu/ - Pointers, Binary Trees, etc.

Writing Beautiful Code
Books:
The Elements of Style by Strunk and White - rec'd by at least one of the guys in Coders At Work
Clean Code by Robert Martin - rec'd in comments here
Code Complete by Steve McConnell - rec'd by Allston, also rec'd in comments here
Refactoring by Martin Fowler et al. - rec'd by Allston

User-Experience (UX) Design:
Quora: What are the best books on UX? - http://www.quora.com/What-are-the-best-books-on-UI-UX-design-for-software-engineers

Websites:
http://twitter.github.com/bootstrap/
Google's Style Guides for Various Programming Languages - !!
7 Ways to Write Beautiful Code
Code Conventions for the Java Programming Language by Oracle

Articles:
Kotaku - The Exceptional Beauty of Doom 3's Source Code

Quote:
I was really excited to write this article, because it gave me an excuse to really think about what beautiful code is. I still don’t think I know, and maybe it’s entirely subjective. I do think the two biggest things, for me at least, are stylistic indenting and maximum const-ness.




Object-Oriented Programming:
- Life of Danie (blog) - Simple Object-oriented programming (OOP) explanation
C++ For Dummies - he uses an analogy of a microwave instead of a house.

REST (Representational state transfer):
- http://tomayko.com/writings/rest-to-my-wife



Misc Cool Links:

Quora - How do programmers code quickly?
http://www.quora.com/How-do-programmers-code-quickly?share=1

 

Quote:
Jesse Farmer:
- They know how to use their keyboards to do work. Keyboards are way faster than mice once you know how to use them. They're also more amenable to muscle memory. Are you clicking around to open new files? When I'm coding I barely touch my mouse.
- They are good typists. I probably type around 80 WPM on average and 100-120 WPM if I'm focusing on my typing, for example. Go practice! I like http://play.typeracer.com/ and https://typing.io/.
- They know how to use their tools, especially on the command-line. Ctrl+R for reverse search, Ctrl+A/E for beginning/end of lines, <Tab> for autocompleting filenames, etc. These become muscle memory after a point.
- They are very good at debugging and are likely to isolate, identify, and resolve a bug 100x quicker than a beginner. This isn't just because they "know more." Oftentimes they know just as much as you, but have a more disciplined approach to finding the source of unexpected problems.
- They have a better sense of where to look for information and aren't afraid to navigate through manpages or even source code to understand how some other system is behaving. If I'm having trouble with a poorly-documented Ruby gem, for example, I'll often look at the gem's source code to see if I can make sense of what's going wrong. I'd say 90% of the time this is quicker than Google.

Regarding debugging, I wrote a blog post (Teaching Novice Programmers How to Debug Their Code) that outlines how to teach people to be better debuggers.

 

 



A Stanford CS PhD's advice on learning to program games (he does it in his spare time):
http://www-cs-students.stanford.edu/~amitp/gameprog.html

a pixel-art tutorial:
http://mossmouth.tumblr.com/post/42652506486/pixel-art-tutorial

GameMaker:Studio seems like a good way to learn how to program. I was reading some advice on making games when I saw that an indie artist-turned game-programmer had made the first version of a game called "Spelunky" with GameMaker, and after seeing some success he was able to make a much nicer version for the XBox.
http://www.yoyogames.com/gamemaker/studio

Ants AI Challenge - http://aichallenge.org/index.php

http://www.justin.tv/startupschool/b/272180383

http://www.quora.com/Charlie-Cheever/answers
http://www.quora.com/Adam-DAngelo/answers


Misc Thoughts:

- thought: a friend had posted 
a link to the memoirs of a CS PhD at Stanford, and someone else had posted, "Only halfway through but it's amazing how much of his experience mirrors my own". This made me think about my zombie infection simulator and how any of those individual people could have told a story that would ring true for many of the other humans in the simulation: "I was minding my own business when suddenly everyone around me started panicking, I wasn't sure what was going on, and then a minute or two later these zombies came into view and started killing everyone". So my question is, under what circumstances does this happen in general? I'd like to have a nice clean description of the characteristics that define situations where this phenomenon may appear. For example, in the PhD example, it seems to be a result of the incentives that exist in academia among professors, journals, students, etc.

Very Important: I'm noticing that as I make progress on the Ruby on Rails tutorial and Elenco 130-in-1 guide, I'm becoming more excited. Seeing my progress and thinking about the future things I'll be able to accomplish is really motivating me in an incredible way. I'd known what Schwarzenegger said about the importance of keeping records, but I didn't expect it to happen in this situation.

- It's extremely important to have a compiler set up so that you can quickly compile your code and see what happens. You should NOT try to figure out how to create the program without ever running your code. This held me up for literally 10 months with the USACO puzzles: I was having trouble learning all the C / C++ code necessary to do certain things so that I could create an entire program and hand it to the USACO website to compile, when I should have just been typing shit up, handing it to my own compiler, and seeing what happened. I should have been starting with the most simple part of the puzzle and incrementally getting more complicated, just like that Stanford professor recommended in his Python class at Google.

- I should try to make "blinders": glasses w/ holes cut in the center so you can focus on what you're working on and not get distracted by stuff going on in your peripheral vision.

- just as with the LSAT, it seems the #1 concern a person should have is remaining motivated:

Quote:
[my friend] (9:04:17 PM): I don't try to use it to get rich because it's very boring
[my friend] (9:04:26 PM): and I'd rather be trying to self-improve than to make money
[my friend] (9:04:47 PM): any type of problem solving and learning
[my friend] (9:04:53 PM): I think is more constructive
[my friend] (9:04:59 PM): then repeatedly solving things out of my toolbox
[my friend] (9:05:06 PM): acquiring the toolbox was useful but
[my friend] (9:05:12 PM): coding @ industry standards is not
[my friend] (9:05:29 PM): unless you're very very lucky and they have you fix what no one else can figure out or something
[my friend] (9:05:33 PM): or let you do whatever you want
[...]
[my friend] (9:05:53 PM): I got very bored doing coding projects at MIT because it was very
[my friend] (9:05:57 PM): "do this design document"
[my friend] (9:06:49 PM): it's also more motivating hacking together your own project



rec'd books by an MIT grad who got his CS PhD from Stanford:
http://pgbovine.net/reading.htm

Stuff I Learn While Going Through the USACO Puzzles:

- if you're having trouble with a certain task, see if you can break it into smaller pieces. This is one of the most useful things I've gotten practice with from these puzzles. It's kind of cliche advice, but if you're staring at something for half an hour and can't figure out how to get it working, you NEED to have the thought/motivation to try hard to break it up.

- if you're having trouble with a certain task, see if you can describe / write out how you would do it in the real world, without a computer. This helped when I was trying to write a function that would convert from base 10 to another base. If you get too bogged down in how to execute things in the programming language it can make it harder to brainstorm.

- Be OK with having your first version be ugly / sloppy. You can always go back over and smooth things over later. Trying to make everything perfect the first time around often makes it take LONGER to get to a great version.

- Don't get too sucked into a particular way of doing things if it's hard to execute. Be willing to look for easier methods. On one puzzle I had the idea that I could use a fancy way of doing things, but it was so hard to figure out how to execute my idea that I burnt out and stopped working on the problems for a month or two.

- libraries are exactly like toolboxes. Each toolbox contains a bunch of tools that you can use, and when you're tackling a particular task you need to think about which toolboxes you'll need to have with you to get that job done.



Making Websites:

Website Designs I Really Like:

Letterhead Fonts -
http://www.letterheadfonts.com/ - i like the art
Saddleback Leather - http://www.saddlebackleather.com/ - i like the art
SoundManager2 - http://www.schillmania.com/projects/soundmanager2/ - I really like how it gives you a bunch of cool stuff to try out on the front page, and even shows you how to use it.
A Quora question asking for sites with good designs: http://www.quora.com/What-websites-are-admirable-for-their-good-design

Interesting Info:
Quora: What consumer Internet companies had a large number of users but failed to monetize?
Quora - How do modern websites check user passwords without storing the clear-text password in the database?
Quora - How is Facebook's search speed so fast?
Yahoo - Best Practices for Speeding Up Your Web Site
http://www.quora.com/What-are-the-best-UI-elements-controls-patterns-etc-that-have-cropped-up-in-modern-web-sites-and-web-apps-recently


Projects I've Worked On

I've moved these to another page because I expect them to end up taking up a lot of space:
Examples of My Code

 

AutoHotkey
The code below will make any window set to "Always on top" if you hit control-space when while the window is active. This is REALLY helpful when you're trying to copy data from one window to another. If you hit control-space again it goes back to normal.

^SPACE::  Winset, Alwaysontop, , A

 




Career Advice

My Advice

- Having a portfolio / references / list of books you've read is really important (especially the portfolio). I sent out my resume to 171 jobs on HN one month and only got a handful of responses. I sent it out again the next month with minor changes, but this time with a portfolio / reference / list-of-books-I've-read, and this time got a much bigger response (maybe 5x or more responses). I made a point of having a picture for each of the projects in my portfolio.
- Automating the process of applying to jobs is really important, otherwise you're going to get discouraged.
- Your first goal should be to make your application good enough so that people start inviting you to interview. Then once you start getting offers to interview your goal should be to get good enough at interview questions that you can pass the interview. There are books that give you interview questions so you can practice them. Sites like Project Euler and HackerRank are also the same as the challenges you'll be given when asked to interview. The difference is that when you're being interviewed you'll need to be able to solve it in a certain amount of time.

My advice to people who want to learn to program

2012.05.15 - Justin Khan (founder of Justin.tv) - The First Time I Used Programming At Work
http://justinkan.com/the-first-time-i-u ... ng-at-work





Conversation with the head of the DC RoR Group:
- I've added emphasis to parts of the guy's email
- This guy was really nice to take the time to write out all of this advice.

 

Quote:
Hi David,

I was just accepted to DevBootcamp (in SF / Chicago) and was wondering if it's a good idea. It costs ~$15,000 and is 9-weeks long. I don't want to live in SF or Chicago; I'd like to stay in DC.

Do you think the market for RoR developers in DC is healthy enough that I'd be able to find work after finishing this program?

-----------

Hi Nathan,

Could you tell me a little about yourself and your background. I think the answer will largely depend on those factors. Are you currently a developer looking to get a jump start on a new language/platform (Ruby/Rails) or are you new to development and looking to switch careers? 

Without knowing that I would say that there is an insanely strong demand for Rails developers anywhere you go, including DC. It's supply and demand and in this case there are far more openings than there are qualified applicants. The key word is qualified. While intermediate and advanced developers can write their own ticket to varying degrees, the beginner might still have a difficult time finding that first job. That being said I've recently seen a dozen or so employers in this area who are hiring at that level. That landscape may change but it tends to wax and wane so you just wait it out. $15k is a lot of money but it's also the time invested, not only for the program itself, but the time it will take to find the right job after you complete the program. If you're patient afterwards then I think it's worthwhile. 

I've heard great things about DevBootcamp and I've met a number of graduates who have all impressed me. It's a tough decision to make, but if you're fully committed to a career change I don't think you'll have any regrets. 

If you do decide to attend, my recommendation to you would be:

1. Start creating immediately. Put it on Github. Employers will look at your Github account to validate you as a developer.

2. Get involved in open source. Pick a project you're interested in and just dive in. Don't be shy to ask for help. You'll not only learn a lot faster and from really smart people involved with the project, but you'll gain an immense amount of credibility. Don't be scared or intimated to do this. You can ease in and people will help.

3. You need real world experience to get hired. While the classes themselves are a head start, employers will want to know that you've worked on something real and not just experiments and assignments. If you can't find a job after graduating, do work for free part time. Volunteer yourself to a company or project that's public facing. Investing that time will pay dividends later. 

I know that's a lengthy response, but it's a big decision and I wanted to give it the attention int deserves. Good luck and let me know what you decide. 

Best,
Dave

 



Is going back for a BS in CS worth it?

 

Quote:
In software at least (I speak from the perspective of someone working in the private sector in Silicon Valley) experience is king. It will be very hard to get a job with a master's in Software Engineering and a BS in history unless you have some work experience that makes it look like you've actually built some software.

If all other things were equal, we'd pick a guy with a BS and two years experience writing software at a company we'd heard of over a guy with an MS and no experience. There is a fairly widely held (but not universal) belief that the reason people get master's degrees in this field is either A) they would let you into the US to go to school and you could start your job search much easier that way, or B) you weren't good enough to find a job with just your BS.

I'm not saying you definitely shouldn't do this, but in software at least, you're going to want internships and published papers (we will read them if we're considering you) and real work for real companies if you want to compete. We've turned down lots of job applicants who's work experience amounted to building "simulated networks" for proof-of-concept stuff in advanced degree programs. Only one person on my team has a masters degree, and he also worked for Microsoft Research and had a strong recommendation from a faculty member who happened to be connected with the company.

posted by tylerkaraszewski

-----

I'd take the engineering degrees off the table, if I were you. If you aren't totally and completely into them, in love with problem solving (and math), you're not going to do very well. These are programs designed to wash out the unenthusiastic and incompetent.

I did compsci for my bachelors. There were a huge number of kids in the program only because somebody had once told them that computers were where the money is. I was in the program because programming was really easy for me, and because I spent lots of time tinkering with my computer anyway. I ran fucking rings around the computers-are-cash kids, because while they did the assignments and passed the courses, I did the assignments, then did about 30-50 hours a week of extra "work" just because I was that into it. I set the curves in every class--except for the couple where there was an even more obsessive geek in attendance. And the cash-kids would ask me what book I read to get so good. Hah.

I have similar stories from my engineering buddies.

posted by Netzapper

Source: http://ask.metafilter.com/176681/Is-ret ... -good-idea

 

 

 

Quote:
So, let’s say that you weren’t in a position to get into a top undergraduate program. One tempting option is to try to get an MS from a top computer science school to legitimize yourself on paper. If you actually are passionate about programming, I would urge you not to do that[1]. Although you will look more legit on paper, many startups are catching on to how useless an MS degree can be. Until the market catches up, an MS will probably get you an extra $10K in your base salary. However, keep in mind that you’ve just taken two years out of your life and paid some amount of money (how much you pay depends on whether you can TA while studying). Instead of going back to school, take a few months to build something really coolTeach yourself thingsTake Udacity and Coursera classes and potentially use their career placement services. Work with a recruiter whose recommendation will help you get a first round interview even if you don’t have a pedigree. Once you start working, raises you get will quickly make the initial 10K boost pretty insignificant (especially given the opportunity cost and potential tuition expenses).

So, to answer the question: BS >>> MS (if they’re from the same school, assuming you have to choose one or the other).

http://www.forbes.com/sites/quora/2013/ ... ecruiting/

 

 

Open Source
 

http://blog.smartbear.com/programming/1 ... rock-star/

http://stackoverflow.com/questions/4364 ... ce-project
http://stackoverflow.com/questions/2284 ... ce-project

Google Talk: How Open Source Projects Survive Poisonous People
http://www.youtube.com/watch?v=Q52kFL8zVoM
2:00 - They highly recommend Karl Fogel's book "Producing Open-Source Software"
2-3 - They give an overview of four-stages of protection:
1) Comprehension
2) Fortification
3) Identification
4) Disinfection
3 min - They make the point that an open-source project's most valuable resource is the attention and focus of its community (contributing members), and that poisonous people will threaten that resource
3-4 - Poisonous people can 1) distract your developers, 2) emotionally drain your community by squabbling or starting infighting. Some people do this on purpose, others do it accidentally.
4min - OCD / perfectionists / people obsessed with progress can unintentionally derail progress [example: endless discussion]. Remember "the perfect can be the enemy of the good".
5-6min - They tell the "painting the bikeshed" story, which has the MI that the amount of discussion that a group will engage in is inversely proportional to its complexity, because the simpler it is, the more people think they know enough to say something.
7min - They start talking about fortifying.
There are four things they think make a healthy community:
1) politeness
2) respect
3) trust
4) humility
8min - Have a direction and then limit your scope, so you don't end up with limitless feature creeping.
- They give an example from their project "Subversion", where they had a big mission statement on their front page for years, so that anytime someone wanted to add a new feature, they could point to the mission and say "That's a great idea but it's outside our mission". Their statement was "To create a compelling replacement for CVS."
- They recommend that if someone comes up with a feature, you say "Come back after we've finished the stuff on our to-do list".
- They also enumerated at the beginning the exact features they wanted to do and what bugs in CVS they wanted to fix.
10min - They give a second example, from the project "Google Web Toolkit". They started by coming up with a very specific mission statement that would strictly limit the scope of the project. "If you're trying to preserve attention and focus, the best way to do that is to have something to focus on."
11min - The majority of official communication happens on mailing lists [I didn't know that]
- Send new people to the archives to dig through old discussions before starting to talk, because if they don't do that they're disrespecting everyone else's time.
- Don't respond to every message in a thread; it's annoying. Come up with one well-thought out post. And don't let people do this if you're running a project.
13min - Document your project: 1) Design decisions, 2) bug fixes, and 3) mistakes (to avoid having new people repeat them), 4) code changes
14min - They say that the usual way that open-source projects work is that someone will build up trust and get commit access, and then they'll just start committing changes and the other people in the project will just trust that the guy isn't messing things up. There aren't usually code reviews before each commit. 
- They recommend having commit emails, and encouraging other members to review those email messages.
15min - Don't let people work on some huge feature on their own and then commit it all when it's too big for anyone to understand how it works. You want everyone to understand how everything works.
16min - Increase the "bus factor" of your code: the lowest number of people in your group who, if they were hit by a bus, could cripple your project.
17-19 - They say that what often happens in corporations and other places is that people will mark off their territory and make other people feel unwelcome about dealing with that part. They recommend that you not allow people to put their names at the top of source-code files. It also introduces politics re: "How much do I need to contribute to get my name at the top of the code?"

 

 

Ideas

 

A chatbot that helps you work through tough problems
- A simple first version would be a chat bot that helps you solve a maze through a series of questions and answers.
-- eg: "Are you at a dead end?" "Do you have any small objects you don't mind using to track your path?" "Do you know if this maze has loops?"
-- eg: "Keep your right hand on the wall." "Walk to the end of the corridor."
- It should keep track of all of the information you have given it, so it can make helpful deductions. That was a huge part of solving the LSAT logic games: keeping track of information you've learned, and using that information to guide your next steps.
- I had this idea when I was struggling with a programming project, where I wasn't sure what to do next. I felt totally disorganized. I wished there was some bot that would tell me what to do.
- The bot could retain all the information and save it to a webpage where you could look at an organized view of your problem.
- It could ask the kinds of questions in Polya's "How to Solve It", like "Can you think of any way this problem could be broken into smaller problems?" or "Have you seen someone else solve a problem like this one?"




A website that makes it easy for people to collaborate and share profit on projects
- basically github with profit sharing
- it could be used with music or creating videogames


Make a tool that makes it easy for people to come up with dance routines
- It would have a library of dance moves, and an indication of what kinds of transitions you can make from one move to another (eg how much time the transition takes and how smooth it looks).
- You could then put in a song and it would generate a dance routine where the moves correspond to the music.


A tool that helps people come up with original game ideas

- There isn't enough innovation in videogames IMO. I think a tool could be developed that would help people come up with new ideas. It'd basically be like the way maps were used in the middle-ages to get a sense of what areas still need to be explored. It'd be a hyper-dimensional map, where the different dimensions would be the different possible ways to innovate videogames.
- One thing I'd need to figure out is what those dimensions are.





- have a person's address in one place, so that when people move the mail will go to wherever they are now instead of to their last address.
- Make a website that automatically generates a random video of people dancing to a song that the user uploads or links to. Make the video a mashup of thousands / millions of videos online. Use some kind of algorithm to detect to rate at which people are dancing. You could analyze the MUSIC in the original videos to figure out the tempo of the dancing, if analyzing the actual video would be too difficult.

NFC / Bluetooth key for smartphones
make an app that lets you use a bluetooth device to keep your phone unlocked when it's near you and keep it locked when it's far away. I asked a pro developer and he suggested that if I wanted to pay someone else to do it, I should go to Odesk and try to find someone in eastern europe to do it for ~$20/hr with a fixed price. He thinks a quick-and-dirty version could be done in 10-20 hours. He stressed not to use someone from India (not sure why). He also recommended using Balsamiq to do a mock-up, which would help to get a lower estimate for the time involved in the project (I guess b/c the developer wouldn't need to waste any time communicating with you).
https://www.odesk.com/
http://balsamiq.com/products/mockups/
Another guy who had the same idea: http://forums.getpebble.com/discussion/ ... tance-lock



A website that rates the name of your startup
- It would have a list of rules for good naming and would quickly tell you if you had broken any rule
- For example, "hitchrides" was hard to explain to people over the phone because the trailing "s" was hard to hear over the phone.


"Dig to China" app
Sky Map - https://play.google.com/store/apps/deta ... .stardroid
Open Source Sky Map - https://code.google.com/p/stardroid/
Android Developer Help - http://developer.android.com/
StackExchange - http://stackoverflow.com/questions/5774 ... e-examples

- make a dancing game where you can push buttons to do different moves. Or create a program that automatically creates a dancing stick figure that dances to music (like that FL Studio app), except make the dancer's moves correspond more closely to the notes in the song. The FL Studio app only moves in time to a beat. Important: the speed / distance with which the dancer moves needs to be coordinated to the speed / distance changes in the song. So, like, don't be moving around a lot in a slower part of the song.
- make a processing app that lets you record a vid of you doing a LG, then lets you upload the data to a webserver, so that a person can listen to you explain how to do it while watching the screen get drawn on, but then they can pause it at any moment and draw on the screen themselves.
- I want a web app that prompts me with the newest items on ebay that meet certain criteria, and I can bid very quickly on each item (like, move a slider and click a button), so the whole thing takes 30 seconds every day.
- i want a mathematica simulator that shows how much time someone should spend studying over the course of his/her lifetime
- I should make Anki decks for all the programming languages I'm trying to learn so that I can learn them more quickly.
- i should try to make a practice game for KhanAcademy that teaches intuition for the linear combination / span idea.
- it would be cool to build a web app that taught people how to draw by using a bamboo tablet and having them trace over stuff on the page.
- I'd like to make a game with Processing that teaches people to read a ticker tape by starting with a really simple situation (maybe 2 other buyers/sellers) and gradually gets more and more complicated.
Resources for this idea:
http://coglab.wadsworth.com/experiments ... ning.shtml
http://en.wikipedia.org/wiki/Implicit_learning
- make a program that will change the words in a body of text to use certain synonyms, and creates a fingerprint of who the document went to based on the particular synonyms used.
- a website that gets full-body-scans of people and then inflates balloon-sensors inside clothing to test the clothing's fit, and uses those two sets of data to recommend clothing. Or just custom-make clothing to a person's body (duh). Or use a Netflix-type algorithm to figure out what other kinds of clothing would fit well on a person if they found that brand X fit well.
- an improvement for github that allows people to collaborate on music videos and see their results instantly in the browser like w/ YouTube's editor

Writing-Style Evaluator
- a program that reads your technical writing and automatically detects if you're talking in a way that will be hard for people to understand if they're not already very familiar with all the buzzwords you're using. I got this idea after thinking about how, when writing a journal article, you need to ease people into what you're reading, but you don't want to take too long to do it.
- The program could also evaluate the strength of the claims you're making, and raise red flags if it looks like you're making broad / strong claims ("All men are jerks!"). IMO this is a big part of what gets people in trouble when they try to insult others: they end up insulting the other person based on their belonging to some group (eg racial slurs), and then they end up pissing off a lot of people they didn't really want to piss off. It's like those movie scenes in a bar where a brawl breaks out because one guy tries to punch another guy, but ends up missing and punching someone else instead.
- The program builds a profile of the way that you speak and can then identify other texts as belonging to you or not. Ex: it can take an anonymous blog post and identify who wrote it.
- The program can help a speech-writer create a speech for a particular person by giving suggestions on how a particular person would say something.

Make something with OpenCV (computer vision)
http://en.wikipedia.org/wiki/OpenCV


A website that makes it easy to collaborate on flashcard decks
- I frequently read books on technical subjects and wish that there was a flashcard deck for the book that I could download to Anki
- One thing the website could do is make it easy for people to do the crucial part of the work and upload the work to Amazon's Mechanical Turk to have people do the boring part of typing up the flashcard. So people could just record an audioclip of the flashcard and (hmmm....maybe just use Android's speech recognition to do this?)


- Make an LSAT-RC-jigsaw-puzzle game, where it takes a passage and breaks it up into sentences, and your goal is to get it back into the correct order.



Linux Stuff

 

How to copy a directory and its contents to another location
http://askubuntu.com/questions/35779/wh ... ctory-mean
Basically, don't forget to use the -R option and to put a "/" on the left of the directory names (you don't need one on the right).

How to force-quit a program from the terminal
http://bdhacker.wordpress.com/2011/08/0 ... in-ubuntu/

Quote:

 

Step 1. Find “process ID” of the program
Each program/application in Ubuntu has a process ID. type the following command to get it’s process ID. In the example, I’m assuming the program is “jdownloader”
Code:
ps aux | grep -i jdownloader

Now you’ll get an output like the following image. Look at the process ID (marked by yellow background):

Step 2. Kill it!
Once you’ve grabbed the process ID, you can close it by this command:
Code:
kill -9 process-id-of-the-program



How to make a linux box shut down automatically every day at a certain time

1. Start the terminal by pressing Ctrl + Alt + T

2. Become a super user by typing "sudo -s", hitting enter, and then putting in the password you use to log into the account.
Source: http://www.cyberciti.biz/faq/ubuntu-lin ... -password/

3. type "crontab -e" and hit enter to open that file

4. Press the down button until you get to the bottom of the file, and then type a line that says:
0 20 * * * /sbin/shutdown -h now
Source: http://www.cyberciti.biz/tips/howto-shu ... cally.html

5. Then hit Cntrl-X to close the file, it'll ask if you want to save, type "y" and then hit enter to save the file.

6. Then to reload the file type:
"/etc/init.d/cron restart" and hit enter.
http://duykham.blogspot.com/2010/01/aut ... chine.html


How to SSH to Linux from Windows
I spent ~10 minutes looking for a good answer, so I'm going to list the best link I found here:
http://www.codeproject.com/Articles/497 ... lusaplusLi

How to install DynDNS on Linux
(This program will let you know a computer's IP address, even if the router changes it; basically you need this program if you want to be able to SSH to the computer consistently)
http://flog.cruzn.net.au/articles/dyndns-ubuntu.shtml

How to install VNC on Linux
The best instructions I found:
http://askubuntu.com/questions/168878/h ... vnc-server


 

Clean Code



This book was recommended to me by a hedge fund manager. I have read it but want to make sure I remember the key ideas, so I'm going to try to summarize it here.

1. Clean Code




2. Meaningful Names




3. Functions




4. Comments




5. Formatting




6. Objects and Data Structures




7. Error Handling




8. Boundaries




9. Unit Tests




10. Classes




11. Systems


Quote:

 

How would you build a city? Could you manage all the details yourself? Probably not. Even managing an existing city is too much for one person. Yet, cities work (most of the time). They work because cities have teams of people who manage particular parts of the city, the water systems, power systems, traffic, law enforcement, building codes, and so forth. Some of those people are responsible for the big picture, while others focus on the details.

Cities also work because they have evolved appropriate levels of abstraction and modularity that make it possible for individuals and the "components" they manage to work effectively, even without understanding the big picture.

Although software teams are often organized like that too, the systems they work on often don't have the same separation of concerns and levels of abstraction. Clean code helps us achieve this at the lower levels of abstraction. In this chapter let us consider how to stay clean at higher levels of abstraction, the system level.

[...]

Software systems should separate the startup process, when the application objects are constructed and the dependencies are "wired" together, from the runtime logic that takes over after startup.

[...]

One way to separate construction from use is simply to move all aspects of construction to main(), or modules called by main(), and to design the rest of the system assuming that all objects have been constructed and wired up appropriately.

 


12. Emergence




13. Concurrency




14. Successive Refinement




15. JUnit Internals



Getting a Job / Interviews

 


InterviewCake
'Using a hash map is [u]so common in coding challenge solutions, it should always be your firstthought. Always ask yourself, right from the start: "Can I save time by using a hash map?"[/u] '

Quote:

 

You might have heard of binary search before, but that doesn't help you much unless you've learned the lessons binary search teaches us. 

Binary search teaches us that when an array is sorted or mostly sorted:
1. The value at a given index tells us a lot about what's to the left and what's to the right.
2. We don't have to look at every item in the array. By inspecting the middle item, we can "rule out" half the array.
3. We can use this approach over and over, cutting the problem in half until we have the answer. This is sometimes called "divide and conquer."

So whenever you know an array is sorted or almost sorted, think about these lessons from binary search and see if they apply.



 

Quote:

 

I was hired not by replying to every email and answering the phone for every recruiter that called, but by getting lost in the wrong building and bumping into Kalimar Maia who was also in the wrong building =)

Yes, that's it no secret technique, I was lost and introduced myself to Kalimar and asked if he was going to the Ruby Meetup group as well, and he said yes. We talked a little and hit it off well. We found the right building and I happened to give a short 5 minute presentation that night. Kalimar said I did a good job and that we should get coffee some time.

Kalimar emailed me the next day and I said I'd love to meet for coffee and get some advice on how to get hired or just about development in general. Anyway long story short I had no idea that ZipList was thinking of bringing somebody new onto their team. We met for coffee and towards the end of the conversation mentioned the idea of applying to ZipList. Just over 1 month later I started my first day at ZipList on August 1st! 2 weeks later I completely finished up with all of my shoeing practice and have not touched a horse since!

The moral of the story is: BE NICE TO EVERYONE!….especially when on an elevator =) Seriously though the "secret" to getting hired as a junior developer is to simply go religiously to local Meetup groups, give short 5 - 10 presentations as often as possible without being obnoxious, and finally after the meetup has finished, go to the local "hangout" afterwards.

Source: http://joshuakemp.blogspot.com/2013/10/ ... final.html




Dan Kegel - How To Get Hired -- What CS Students Need to Know

 

Quote:
How Can I Get Experience Without a Job? If you're in college, and your school offers programming lab courses where you work on something seriously difficult for an entire term, take those courses.

 


Cracking the Coding Interview by Gayle Laakmann McDowell

KhanAcademy - Software Developer - Intern

 

Quote:
Along with your resume, please include:
A) Links to any projects (we really like these). We especially like live projects; please do NOT send your code.
B) A cover letter that includes why you want to join Khan Academy
C) A copy of your unofficial transcript
D) (Optional) While not required, it is favorably looked upon to build an exercise of your choosing using our open-source framework

 


A Website One Student Made To Get KhanAcademy To Hire Him

 

Quote:



http://pboyce.com/
StackExchange - How easy is it to obtain an entry level programming job?

 

Quote:
I suggest finding a shop (or two or three) and try to contact the programmers that work there (or the administrative assistants). Ingratiate yourself, use the internship angle, offer to sweep the floors and clean the windows and anything that gets you in the door. Then, when you get in the door, shut your mouth and absorb as much as you can, including the hierarchy (such as, what's considered an entry level position). Shake hands, smile often, be honest and respectful, and find an advocate.
[...]
I lived for a short period of time in Mountain View/Santa Clara back in the early noughts (00's), and the above was consistently the gist of what they had to say (plus some film set wisdom).How do you get a job at Cisco/Oracle/Google/etc.? Go have lunch on their campus. Often. Talk to people. Find out what they're working on. Research, be interested, ask thoughtful questions. BE NICE. Stick around. Don't be a pain, don't sulk; congratulate the more fortunate. Be persistent. Observe hierarchy.

 

 

IDEs

 

Sublime Text 2



How to Get Started with Sublime Text 2
My Web Design Workflow (and steps to achieve it!)
http://blogkev.wordpress.com/2013/05/24 ... chieve-it/

Packages to Install
Git, SublimeCodeIntel, SublimeLinter, ColorPicker, ZenCoding and JSLint
Source: http://blogkev.wordpress.com/2013/05/24 ... chieve-it/

Plugin: Emmet / Zen Coding
Quick Intro:
http://www.smashingmagazine.com/2013/03 ... llo-emmet/





Accepting Credit Cards Online



TheSiteWizard - Accepting Credit Cards on Your Website
http://www.thesitewizard.com/archive/creditcards.shtml

TheSiteWizard - How to Put an Order Form or Buy Now Button on Your Website Using PayPal
http://www.thesitewizard.com/revenue/ad ... tton.shtml

WikiHow - How to Cancel a Recurring Payment in PayPal
http://www.wikihow.com/Cancel-a-Recurri ... -in-PayPal

Can My Customers Use Paypal Without An Account?
http://www.kalzumeus.com/2008/11/16/can ... n-account/

PayPal - Enhanced Recurring Payments for PayPal Payments Standard (subscription billing for people without a PayPal account)
https://merchant.paypal.com/us/cgi-bin/ ... p_overview

  • $19.99 monthly fee
  • No setup charge
  • No monthly minimum
  • No cancellation charge
  • Transaction fee: $0 to $3,000 in sales - 2.9% + $0.30


Problem: PayPal Sandbox IPN Not Inserting Into Database - This was a problem I was having.
PayPal IPN hander is no longer inserting into database
http://stackoverflow.com/questions/1192 ... abase?rq=1

Paypal IPN Sandbox - IPN Listener - no verified or invalid
http://stackoverflow.com/questions/1771 ... or-invalid

2009.03.04 - Using PayPal's Instant Payment Notification with PHP
http://code.tutsplus.com/tutorials/usin ... --net-3271
- This seems like a pretty good guide. It has lots of pictures.
- This guide also shows what code to include to create a new user account when the person's purchase is successful.

2011.09.10 - PayPal IPN with PHP
http://www.micahcarrick.com/paypal-ipn-with-php.html
- This was a very helpful guide. It includes a link to a library (php file) which apparently makes the whole process a lot more streamlined.
- Here's the library it links to: https://github.com/Quixotix/PHP-PayPal-IPN

2012.07.12 Change the IPN url on existing subscription
http://stackoverflow.com/questions/1145 ... bscription
- Very important to know: Unfortunately, there is NO WAY to change the IPN url for existing customers/subscriptions.
- That means that if you have multiple products / websites on the same web host and want your ipn listener on that web host, you must share a single ipn listener between all of them.

 

Programming Challenge Websites



Algorithms

Dynamic Programming (DP)
http://en.wikipedia.org/wiki/Dynamic_programming

https://activities.tjhsst.edu/sct/lectures/0405/dp1.pdf

Quote:
Dynamic programming, often abbreviated "DP", is a technique to efficiently solve recursion problems -- problems whose solutions depend on solutions of smaller problems -- by storing partial results. Many times, it is obvious that a given problem is a recursion problem. However, it may not be so obvious that using DP will tremendously speed up the solution. We start by looking at an example.



Range Trees
http://en.wikipedia.org/wiki/Range_tree


CareerCup

 


- rec'd by Choketsu


Codecademy

 




CodeChef

 




CodeForces

 




HackerRank

 


- rec'd by Choketsu



Kaggle (Machine Learning)

 



Someone who works with machine learning explaining how Kaggle is a simplification of real ML work:
http://jvns.ca/blog/2014/06/19/machine- ... petitions/


Polish Olympiad in Informatics (POI)

 




topcoder

 




USACO

 



- rec'd by Choketsu

How to get started training at the USACO Gateway
http://blogkev.wordpress.com/2013/09/14 ... o-gateway/

What is it like to attend the USACO training camp?
http://www.quora.com/USA-Computing-Olym ... ining-camp
- It's only a week
- New people just get 3 hours of lab/lecture in the morning
- The top guys do a contest every day. Sometimes the contest goes until after lunch, otherwise they just review after lunch. (Seems like 5 hrs/day)
- Then everyone has fun for the rest of the day

If one is stuck on a particular section, is it worthwhile to keep on trying to solve the given problem, or should one move on to other sources in preparation for programming contests?
http://www.quora.com/Is-it-worthwhile-t ... ning-pages

Richard Peng, one of the most successful Canadian IOI competitors of all time, on the USACO training pages:

USACO training was put together before the major IOI escalation (Finland/Korea/Wisconsin). A lot of the techniques described on it are no longer useful on *OI and a lot of the 'hot' topics over the past few years are not covered. Also, a lot of the bottle necks on training are quite meaningless, and they typically cause a lot of frustration and time waste on the scale of months.


Python

 

Python Web Server/Hosting - PythonAnywhere
https://www.pythonanywhere.com/
- It has a free limited version

Django



The Official Django Tutorial
https://docs.djangoproject.com/en/1.6/intro/tutorial01/

Amazon - Two Scoops of Django: Best Practices For Django 1.6 - (Intermediate-Level Resource)
http://www.amazon.com/Two-Scoops-Django ... 098146730X

2009.12.04 - StackOverflow - How should I organize Python source code?
http://stackoverflow.com/questions/1849 ... ource-code

2014.04(?) - Harry Percival: TDD for web applications, from scratch - PyCon 2014
https://www.youtube.com/watch?v=X9474CgJleg



Test-Driven Development in Python



Mutation testing in Python:
https://pypi.python.org/pypi/MutPy/0.4.0

2008 - Python Module of the Week - unittest – Automated testing framework
http://pymotw.com/2/unittest/
- This was a very helpful introduction. He keeps it short and simple.
- Check out "nose"

How to organize python test in a way that I can run all tests in a single command?
http://stackoverflow.com/questions/3667 ... gle-comman

2009 - infinitemonkeycorps.net - Python Project Howto (with a section on pylint and unittest)
http://infinitemonkeycorps.net/docs/pph/

2010.03.02 - Where do the Python unit tests go?
http://stackoverflow.com/questions/6115 ... ts-go?rq=1

2013.01.03 - unittest introduction
http://pythontesting.net/framework/unit ... roduction/

2013.02.21 - TutsPlus.com - Beginning Test-Driven Development in Python
http://code.tutsplus.com/tutorials/begi ... -net-30137

2014(?) - Python-Guide.org - Testing Your Code
http://docs.python-guide.org/en/latest/writing/tests/

2014.06.29 - O'Reilly / Amazon - Test-Driven Development with Python
http://www.amazon.com/Test-Driven-Devel ... 1449364829
- The book seems to follow the same route as Hartl's RoR book: it goes through a single large web development project

  • No labels