Depends on the type of internship you are looking for and where you want to work. Most technology companies offer internships, check the company website or reach out to them to find out if they do and how to apply.

While learning try to do bite size projects that can also be portfolio items that you push to Github. When times get difficult and it appears that Stackoverflow and other online sources will not able to answer your questions, do not be afraid to jump onto one of the many IRCs

1. Learn to program for fun. Forget you are looking for a job at a startup and build something you like. Having said that if you can learn HTML, CSS, Javascript, JQuery, Angular it would make you very marketable.

2. Apply for jobs on a daily basis, searching for jobs listed in the last 24 hours.

Don't work for free (just do more open source rather than doing that)

If the above doesn't work expand your job search to include all companies not just start ups. Also expand to other cities if required and be prepared to relocate.

I agree with the comment below, specific skills will be different depending on what company. I came into programing and CS from concert Lighting 5 years ago. I started learning iOS however if I did it again I would learn something like Javascript/ html of Java first to get an understanding of the concepts. Check out Code Academy.

Also I would get an idea of what kind of role your after and learn the relevant language.

If you are interested in basic programming courses and have the time the Stanford courses (CS106A and CS106B) which are on iTunes U are good starting points.

Maybe I should elaborate on my background a little more. I recently completed my Masters in Computer Engineering from University of Florida and am working at Ebay in Philadelphia. I know my basic algorithms and data structures, and can confidently write programs for implementing them.

I would like to work as a full stack developer in a start up. The technologies I am interested in developing my skills are : Java, REST API programming, Javascript, HTML, CSS.

Could you suggest good sources online or otherwise to develop my skills in these areas?

You'll need to be more specific, since there are startups in many different businesses. Some startups sell t-shirts to people on the web, some implement messaging services on mobile devices and still others build custom hardware with embedded software. The programming needs of these businesses are very different.

Having some side projects, being active in communities (Stack Overflow, Github), and having a constant thirst for learning new technologies have been the keys to developing my skills and acquiring jobs in startups.

What you should do is pick one stack to work with, and become good at it.

It's okay to not like the stack you picked, as long as it's popular. But learning is hard, so stick with whatever you picked to the point where you have a mobile app, or a web app on a server with a rest API that your front end code uses.

Some stacks you might look at:Have a new Macbook and an Iphone? learning swift and objective C and picking up IOS programming will get you work.Have an Android phone, and any sort of computer that's moderately fast? Learn Java and becoming an Android Developer.

But maybe you want to do a web stack. You generally want some experience on the back and and the front end. When in your learning, you don't know what to use out of a bunch of tools, pick what is most widely used, and if it's a tie, go with the older thing, or the simpler thing.

You will be learning Javascript, as well as HTML and CSS for the front end dev work, so for the back end Node.js, which is a server side javascript platform, is a good thing to learn. Express is one framework, but it's most popular, and you want to pick up a popular stack.

Like Python? Learn Django. If the company you want to work for uses a microframework like Flask or something, they will still probably hire Django devs, but the opposite may not be true.

Like Ruby? Ruby on Rails isn't the only framework, but it's super popular, and you want to get the skills, right?

Learn to use the command line (Mac, Linux, or cygwin if you have to stay on windows) to do things. Sign up for Amazon's free 1 year of cloud services, so you can practice setting up stuff over ssh and using git.

Learn git, enough to be able to put projects up on github, and to get them down onto your server.

In terms of front end, learn enough jquery to interact with a REST API and get data from it into your app. Consider a front end framework like angular. Learn bootstrap, which is a CSS framework, because again, its popular.

It's not necessary to understand big O or data structures in detail for a startup job, but it might be to get hired. Knowing SQL is probably helpful eventually, but don't worry if you don't.

Why do I keep telling you to pick the popular thing? Because startups want people who may not know the stack, but know how to use a stack and accomplish something. You can get hired to do android dev knowing only IOS, or ruby on rails knowing django, or using react and backbone when you know angular.

Learning to program is hard. Try to get in an hour or two every day. Once you know how to make something specific in a specific stack, branch out and learn more broadly.

You and your wife having a difference of opinions on major life goals is something you should hammer out between yourselves, possibly with the assistance of a professional.

Let's focus on the more immediately solvable problems: if you're getting "You are invading my space" / "I see too much of you" signals, trivially solvable. This happened a few months into my marriage as well (I've been self-employed for the duration). I started making a point to work out of a cafe most days, and eventually found a co-working space. This lets my wife have run of the house during something which (most of the time) approximates a normal work day.

Not sure if it helps your situation, but it was a major stressor for my wife that I was not "with her" while I was physically in the same room with her. She prefers me being out-of-sight during the workday and an attentive husband and father outside of it than to feel like she's competing with IRB and losing for attention at 10 AM.

It is a regretful fact, much remarked upon in sociology literature, that financial pinches cause divorces. Make whatever adjustments to your business are required to maintain the standard of living that she expects you to have. This could include e.g. consulting to help bootstrap the product business, as opposed to burning through savings every month.

Many important stakeholders in your life may not appreciate how bootstrapper math actually works. Expectation management for it is important. Many stakeholders may follow scripts such as "A middle class man should work for a living. Someone who works is seen as working. Someone who is not seen as working is, therefor, not working." This counsels not conspicuously looking like one is not working. If you can develop other commonly accepted indicia that you are doing a Real Job, I recommend doing so. (You are, absolutely, running a real business. Non-entrepreneur stakeholders are not the only people in the average bootstrapper's life who need to understand that.)

Generic book recommendation for improving marital communication: the Five Love Languages.

This is a big problem and possibly not fixable. It indicates deeper problems, like communication problems and incompatible values. It also means you disregarded her wishes and now can't understand why she is unhappy about that.

My wife chose to be a stay at home mom and I think she resent my being in her space during weekdays.

Then get out of her space. Find someplace else to work. Go to a library or get an office of some sort or go to a business incubator space or something.

Also, do not underestimate how freaked out she probably is about the lack of financial security. This is a big hot button for stay at home moms. Can you find a way to give her some additional sense of financial security? This was a big source of friction in my own marriage, which ultimately ended in divorce. (I was the stay at home mom.)

Communication is the key. For example, I'm trying to figure out from your post what the actual problem is. It seems like you don't know, which is not exactly a surprise. You say "I think she resents my being in her space during weekdays." First of all, you can ask her what the problem is. Second of all, you can try to give some breathing room by working in a coffee shop or something.

Of course that one issue is not everything, but it is something that could be worked on in the short term.

I highly recommend the book Getting the Love You Want.

edit: Rereading this, it sounds more brusque than I intended. Also, if you do ask your wife what is wrong, that can obviously be a charged conversation. Getting the Love You Want has a technique called the imago dialogue. Even if your wife (who seems reluctant to therapy) won't engage in this, you can still use the techniques yourself. For this particular conversation you want to focus on mirroring, that is: let her speak, then repeat what she told you and ask if you summarized it correctly. If you're not both on the same page, this may end up being one-sided. The point is to make sure you understand her point before you make yours (or vice versa). You will often see you're upset about very different things.

With a kid, your wife's priorities have shifted to revolve completely around him/her. It's a tiring and thankless job, and anything else looks easier in comparison (true or not). Thus, when you abandon your previous role as secure breadwinner to pursue your dreams, it makes it seem like you don't have the same priorities. Add upon that, you are at home and visibly not contributing to the priority, since you have such an easy time (in her eyes). Lastly, it's triply frustrating because she is now dependent on you, having given up her career and her uterus (and thus a reduced chance of finding another breadwinner), but you have ignored her predicament.

Anyway, not saying she is right and I understand the dream as well. Just pointing out her perspective (I've got a kiddo as well).

What is done is done, so the thing to do now is to give it your best shot, but also communicate your progress honestly. You have customers, which should be a great turning point for the both of you.

It really sounds like you need to sit down and have a conversation with your wife about both of your visions for the family, financially and otherwise; right now (from your description) it sounds like you made decisions independently of her that she didn't buy into, and are now trying to guess what might be bothering her about that.

What I think you need to do is work to understand what she is thinking, and work from there to, if possible, come to a mutually-agreeable approach.

I'd be cautious about unilaterally adopting any of the other approaches suggested in the thread (e.g., working from another location), because if the real underlying problem isn't "you're invading my space", but, e.g., "you are unilaterally making decisions and not respecting my concerns", than that may exacerbate rather than mitigate the situation.

As a short term pressure relief you could work from another location as others have suggested. Try that. If it doesn't help I suggest quit the start up for now, get a good job to bring in the money and and return to the business idea later on. This is assuming finances are an issue. Unless you are rich?

When you have family you need to optimize for everything - wife, kids, financial and dreams, and not just for your dreams. This can be quite a juggle and a tension between your needs.

However the default of the 9-5 job, the rent/mortgage paid and spending time with the family is always a stable place you can return to, and then you can be in a good space prepare yourself and your wife for your next entrepreneurial adventure.

The next priority is to get you and your wife on to a stable footing, with good communication, and build a common vision for you and your family for the next 10 years and the next 20 years which may include building a business. I think talking about the next 10 years alone could give your wife a sense of security that you see yourself with her and the family forever.

Staying at home with young children is stressful, and with a baby crying, dirty nappies on the floor, or toddlers throwing tantrums, the house in a mess and the husband in the way and not helping I can imagine it would be quite stressful for the wife. Plus lord knows how you concentrate and be productive, they must be in your way too.

Lots of great words in this thread, but only you can decide what is best to do. You know all the facts. I wish you the best of luck and hope it all works out. I am sure it will.

A. Starting with questions relating to business viability: A1. Are the customers paying enough to provide a reasonable income? A2. Are the backlog of paying work and revenue growing? A3. Are you exclusively spending your time completing paying work and directly finding paying work?

If the business isn't viable or your time is being spent on playing house or both, it's time to pull the plug.

B: Relationship questions: B1. Do you value your marriage more than your dream? B2. Are their children involved?

These all come into play even if the business is viable because it is orthogonal to family stability.

Pulling the plug on a non-working business now is better than slow heat death. A bootstrapped business is different from a investment fuelled startup. Just surviving is good for a startup because it allows the possibility of exponential growth. A just surviving small business takes nearly as much energy, but only offers an upside of "a little better than surviving". Figure out if you're treading water to protect sunk cost.

Since the journey you are on, as you say, it really works when your life partner buys into your vision.

You are going to be making choices about how to work, when to work, and with regard to the current burn rate of your life, and with regard to the value of future pay offs, that are vitally important for people in a relationship to agree on. If your partner doesn't share your passion for this, or believe in you, how are they going to come on that journey with you? Will they be there for you and support you when you and your business need that?

Will they give you the extra runway by getting a job, or will they insist you chuck it in and get a job?

I mean, having a business is a lot of ways like having a baby, you are always working on it, and everything changes around doing it. And it really works for your partner and you to carry that weight together.

No one knows what's going to happen, it could all work out. Maybe it's simply differences in expectations that can be reconciled through communication. Or maybe it's something more fundamental. At this stage tho, you don't know.

My choice was to cut my losses quickly when it seemed like it wasn't working. I would caution against that, since I feel that the marriage is an asset, because of your commitment to each other. When you got married, didn't you vow to be there for each other, through sickness and health, and failure and success? So my recommendation after trying the opposite ( and it not working ) is just stick it out. Try to make it work, because that relationship could be so important to you if it maintains.

In my case, we divorced. Not, mind you, just because of a business. There's always a mix of things, and both people are responsible. I think the main thing was simply not really emphatically communicating about what our expectations were, and also not really being so committed to sticking it out, we both chose to cut our losses. Well, at least we had the same efficient mind! Still I believe through lack of communication and commitment we didn't quite work out exactly what it could have been. So persistence, could really be key.

Later I found someone who really did buy into my vision, and support me while working on the project. Objectively this person is far more compatible with doing this startup, tho the truth is, you never know how things could have been different, had you done them differently.

As other posters suggested -- maybe get some husband time to yourself, away from the wife and kid, cafe working, or cave working, or shed working, some time and place to be around other people who do share your vision. I think that idea of community really helps. Why? Because in a way you are asking your wife to be your community if you don't get out there and rely on others as a community. And being around the energy of others can really refresh you and give you that mental reset so when you come home, it's like a delineated time, and you're all ready to go husband and daddy mode again.

It is a scary time. Maybe rethink feeling ashamed, tho. You're trying to juggle doing a lot of things. You're not doing anything wrong -- you're just trying to make it work. That's noble, not shameful.

For the home office, compromise and go to one of those places where contract workers rent out an office cubicle. My wife applied for a job where she was going to work from home and I told her she could not work from home all the time. She needed to go to an office environment to at least talk to other people for both our sanity. As for the relationship in general, there are deeper problems than just a home office. Maintaining a relationship means that you know what your roles are and what responsibilities those roles have in the relationship at any given time. Sometimes your wife needs someone to listen to her and not solve her problems, at other times it is you who needs that and so on. I always tell couples to start with communication. Set some ground rules for communicating and set designated times for having discussions if you do not have have time to argue at a given moment. Working couples disagree and commit to shared resolutions. Lastly be honest with yourself, what will make you happy (what can you live without and what must you absolutely have in order to be happy), don't ask for ridiculous things, just focus on what want out of the relationship. Be prepared to also have her point of view too.

Sorry to hear it, I don't know what to tell you to do, but I will share my personal experience and say that I wouldn't abandon your dream yet.

I spent years working outside the house, whether it was for myself or an employer I was not at home. My wife was/is a stay at home mom as well and that is a full time gig I sure as hell wouldn't want, it is hard. About 3 years ago I started working out of my house, and honestly my wife and I didn't really talk a whole lot about logistics we just did it and honestly had some excitement about it.

Well.... About 3 months in I noticed we both were being shorter with each other and honestly we were more distant even though we were in the same space. After a couple of more months we both realized something wasn't right. We had to have a few conversations about boundaries, separation of space and expectations. It took probably another 2-3 months to get a balance around it, so if you are doing the math from me starting at home full time to us having some balance it was like 6-8 months.

Somethings we did (still do):

1. Dedicated one room to be my office and put doors on it to keep that space isolated. We also setup some rules around it, if I was in my office with the doors shut, she had to consider that I was working and needed to respect that and not interrupt me unless necessary and even then to knock first. If the doors were open then it was open and all I asked was for her to not interrupt me if I was madly typing something out. :)

2. Being me, I also was making suggestions why she should do something differently around the house, or when she would complain about something I'd do the stupid male thing and offer a solution when all she wanted was the venting time. Even if my way was more efficient or better, she was running the house and I needed to respect that and let her do it. If she needed help she could ask me and I'd do what I could, but we agreed we'd have those as conversations not me just sticking my nose into something and commenting etc.

3. I spend a little time every week outside the house doing my work. This helps her and I. For me the change in view and different environments can be inspiring and for her she gets a break from me and to have some alone time. We all need some alone time.

4. I set hours on my work, and do my best not to violate them unless something is going on or its crunch time. This lets the house have a more natural flow, e.g. work hours and play hours.

5. We go out to lunch at least 1-2 times a week together, outside the house as a treat to ourselves, like a mini-date. My wife rocks and will also make me lunch a lot of days cause she knows I will work right though lunch and not eat which is bad.

6. Also, we joined a gym and sometimes go workout together and other times go separately. But it let us have time again outside the house.

Over time we have relaxed rule 1 more, but in the earlier days it really helped us get the cadence of the house down. Also, I get that it seems like you need less time together sometimes, but in reality we found that it wasn't the amount of time we were spending but how we were spending it and respecting each others boundaries. We had and have a solid marriage so while this took us time to figure out we just had to get the respect and rules in place. And of course, from time to time we still get on each others nerves during a given week, I know I can be difficult sometimes if for no other reason is that I am a constant smart ass. But that's just normal marriage to me.

TL;DR> Set boundaries, respect them, setup distinct times for work/home, respect her "job", get out of the house weekly for even a few hours and setup dates or activities together outside the house.

Coursera has a couple of courses on algorithms that would be acceptable for beginners but also very challenging (in a good way).

MIT OCW's Intro to Computer Science and Programming (in Python) covers a lot of ground related to programming (more than just Algos), but it covers some essential sorting algorithms and eventually gets into dynamic programming. I don't think anything much simpler than this would be worth your time (not to say this is the best), but the readings themselves (especially those from wikipedia) can actually be a little dense:http://ocw.mit.edu/courses/electrical-engineering-and-comput...

I suggest that you work patiently through a good text on algorithms and data structures that has code samples in it. I recommend "Algorithms I and II" by Sedgewick or "Data Structures and Algorithm Analysis in Java" (or the C++ version) by Weiss. I also hear good things about "Data Structures and Algorithms in Java" by Lafore.

The above books are quite apt for beginners. You should expect to struggle a little but you must persevere anyway. I remember struggling with sorting and matrix multiplication algorithms when I learned it the first time in school. Do not mistake your unfamiliarity with the subject for its inherent difficulty! Once you write a few sample programs and see how the algorithms play out, you'll get the hang of it.

If you do not have a math background , I suggest you start with Logarithmic analysis and properties of logarithms ( many tutorials in youtube ), then attend the Coursera algorithm courses and some selected courses on CS50's youtube channel.

Often, the first examples of computer algorithms involve sorting. There will be some discussion of "bad" sorting algorithms that run in O(n^2) time. This will illustrate how to use algorithmic analysis to understand time complexity. Then the faster merge-sort will be introduced as an obvious improvement to O(n log n) time, followed by quicksort with O(n log n) time and O(n) space...and at this point you may reasonably ask, "So what?"

The thing is is that merge-sort was discovered by John von Neumann [1] and QuickSort by CAR Hoare [2]. The less accomplished of the two won a Turing Award and one might quite legitimately walk away with the belief that developing algorithms from scratch may be non-trivial simply because the subject is really hard.

Which is a round about way of coming to some advice: if the very subject of algorithms isn't enough to scare you off, don't fret the fact that the presentation looks difficult. The apparent difficulty is in the subject itself and the only thing a gentle introduction or simplification means is that someone is pretending that the subject of algorithms is not really really hard with the natural consequence that when it does get hard, you're more likely to see the struggle as a failing of the student rather as inherent in the subject matter. And everything interesting and important in algorithms is hard.

This is why I don't hesitate to suggest people consider TAoCP. It covers the "easy" parts as well as or better than anything else I've seen. It just requires being ok with not understanding everything or even most things that Knuth covers because he finds them important and interesting. Because I'm never going to be that smart, I might as well work at my own pace, and celebrate the small victories like grasping the answer to one of the easy exercises that a year ago, I wouldn't have grasped.

The other recommendation is to take an algorithms course on Coursera. It's free.

One thing I really liked was using Project Euler. Step 1 for any given problem was to solve it. Step 2 was to go through code written by others benchmark it, and learn why there code was faster than mine.

it may work to start with just one area,an area that is close to something you already are making or solving, and then, literally, in searching for algorithms for that pick the shortest one and solve a small implementation of it.

in finding a reference implementation i found the following helpful :

-- pick code in the same language you will be writing your version in.

-- if you can, find and read the original paper ( try searching google scholar ) describing the algorithm, these are often clearly written and explain the motivating situations that led to the way the algorithm was constructed.

finally some example short algorithms from a few areas and favorites of mine :

string processing :

-- LZW algorithm

-- longest common subsequence algorithm

tree graph processing :

-- post order depth first search

list processing :

-- group elements in an array into sub arrays of length k

integer processing :

-- change of radix algorithm ( change a mumber from the given base ( 10 ) to base 2 ( or even to other bases as well ) )

most of all, just work your way through stepby step, like the algorithms your are making.

I don't know anything about Boston Dynamics Robots, but "Deep Learning" is not a full solution to building robots. Deep Learning architectures may be used for sub-problems that robots need to solve, e.g. image classification, object recognition, or other classifications tasks where hand-designing features is hard and enough data is available.

Robots are a complex system with lots of moving pieces. Often they use some form of reinforcement learning (which in turn may use Deep Learning for estimating rewards) to decide which actions to take.

I don't know the real answer in Boston Dynamics' case. However, in general, the answer is that Deep Learning is just beginning to be integrated into the pipelines of major robotics/reinforcement learning pipelines. The same thing took time in complicated speech recognition pipelines.

Deep learning is great for recognition/classification but robotics is much more.. Deep learning has to coexist with a number of other critical components.

However, there is major and extremely exciting work being demonstrated in the literature art recent conferences on this front. Expect major developments this year

@opless: Deep learning may be a fad in the press, but there's substance underneath. It's been breaking one accuracy record after another in raw, unstructured media year after year. ImageNet is just one deep convolutional net competing against another. A lot of other ML algorithms have hit a ceiling, and the ceiling is tied to not having enough humans to engineer enough features. DL doesn't have that chokepoint, and it is able to process vast seas of data that other algos have trouble with. Therefore, for many problems, it will continue to win.

We noticed the same broken things here. I don't want to give Elance/UpWork too hard a time - they can be good for some things (like Data Entry, etc) but clearly their model has some issues when it comes to development projects.

Where our model is different is that all of our projects have a dedicated Product Manager who overseas the build for fixed-price projects. The developers and clients deal directly with the project's PM (not with each other). That saves time for the client. It adds a layer but this counter-intuitively improves communication. I speak broken Spanish. So if I run into a Spanish speaker who speaks broken English then we can communicate. That's fine if we're doing something simple but if the nuance of different words matters then we'll do much better if we have a professional translator who's a native speaker in both languages in between us.

I actually interviewed the former CEO of oDesk for my blog a few years ago (long before Gigster existed) so I've been following this space and thinking about where it's heading for a while. That's why I agree with the OP about the opportunity for a new platform to rise in this space and the fundamental issue that a race to the bottom will impact the quality of the build.

@jalopy & @mithaldu - I think what you're alluding to is the simplicity of not having to deal with all the pain of being a freelancer (client management, paperwork, etc). That's our appeal to developers: we give them specs and they can just focus on building, not marketing themselves, client management, etc.

I can confirm that Upwork is an unmitigated disaster. As someone trying to get started and hire a contractor, I couldn't figure how to do some very basic things. It's truly mind-boggling how bad it is.

Everyone involved in the design and programming should be placed on some kind of industry Do-Not-Hire list.

> the only reason anyone's still using them is the lack of a better alternative

That, however, is not true. Freelancer.com has been around forever and is much better. (By which I mean it's functional a vast improvement over Upwork.)

The major issue I am finding with the new platforms like gigster and toptal is their negotiation strategies.

It is in their best interest to keep deal-flow high, which means that they try not to reject submitted projects and try to push the low prices onto the developer.

If a developer from India knows his chops and can run circles around JS-developers in Silicon Valley, he will also know that he can charge $100 per hour, over-deliver and still be cheaper than a bootcamp-JS guy.

Yet Toptal will negotiate a rate of $25 (or thereabouts), based on some average-pricing they use and justifying that "this is what most devs charge in your area, so $100 per hour will be too high, simply cause you're in India".

Also, this is a new account asking this question... It got me wondering whether this is some backhanded marketing-PR for gigster.

They are part of the Summer Class of 2015 for Y-Combinator and are really promising. You basically sign up to be a Gigster and then get paired with gigs that pay. Within a week you could be up and running with real projects that actually pay.

Gigster handles all the PM and HR related functions of a business and quickly gets jobs to you so you can start right away.

I'm a freelance developer and I hire people to do small, well defined jobs for me all the time from these sites (data entry, ms word to clean html conversions, etc.).

I've used elance extensively and I'm very, VERY disappointed with how the "transition" to upwork has gone. It is bordering on unusable and has added a lot of difficulty to what should be a straightforward transaction. What a disaster.

So yes, I would agree that there needs to be another competitor that is straightforward to use and definitely an opportunity here. I feel like Metcalfe's Law / network effects of the existing sites might be difficult to overcome, but its worth a shot!

Has anyone here even made any money from these sites? I looked at them a couple times to earn some beer money. The jobs are always vague or the low rates offered by some programmers makes the market less appealing.

If your product is about sharing in small group then it's best if the freemium plan allows only public sharing so users have an incentive to pay.

Next step is to make sure that users who like sharing publicly don't sign up in the first place because they're not your target audience and public sharing can come with support headaches (think about copyright claims for example).

Does your pay-for plan already include a free trial period? Be it a week or month, it forces users to make a decision to upgrade. In my experience lots of users simply forget and reminders/ads don't work well as they can be ignored.

A browser where the security updates aren't married to "interface enhancements".

Just give me the security updates for the version I have, because I don't want your designer's latest idea of what a browser should look like, and unwanted new features forced down my throat with the security updates.

Choice about what new features to install - much like Windows updates, would be nice.

At the very least provide ways to keep things working and looking exactly how they are at the moment. Needing an add-on to bring back the status bar in Firefox is a joke.

I want to be able to stay logged into Google/Facebook/Linkedin for convenience without other browser tabs knowing anything about it...or isomorphically, I want to be able to browse the internet while logged into those services without the pages I am browsing leaking data back to those sites. I'll take the hit of downloading 100k of jquery on my 20mbit pipe a few extra times.

I want my browser to sandbox my information to the same degree I can achieve by running separate browsers or setting up special browsing VM's.

I think Firefox + Vimperator is pretty decent by itself, it could be slightly better.

* Even better extension support -- enable writing extensions in any language: expose a file system based API for a full Unix philosophy experience. uzbl has something like this but it's not nearly as ideal as Vimperator is for my use case.

* As others mentioned, lose mandatory UI downgrades and other crap Mozilla's been pushing us lately: give us a platform to customize instead. (Practically running a Firefox compiled from sources helps with some of the issues people have, but sadly there will be a day they overhaul the UI in such a manner it hinders the usability. And because of the security stuff I just can't go back and use an old one forever.)

* Yeah, better bookmarking. Firefox could use a better system, and Vimperator doesn't solve it either. Full-text search among history + bookmarks would be pretty good.

The well exposed API for external apps could solve it all, save for crap UI. For instance, the bookmarks could be crawled to an org-mode document where I could annotate, categorize and tags things to my heart's content.

- and last but not least: if you want to make money off me, instead of sneakily tracing where I go and what I do and partnering with Google, ask me for it on first start and maybe with a discreet "donate/subscribe" button on the start page / speed dial.

- works on X, the terminal and Android (yeah, that's a tall order, but it sure would be nice to have the same keystrokes available in X and on the terminal, and the same information available everywhere)

Its development should be managed by a group who are not concerned with generating money from advertising/tracking or any other privacy reducing endeavors. A group who put user privacy and security at the forefront of every decision made.

No antifeatures / downgrades. I am aware that this is a fuzzy concept. However, a few specifics:

* Think very hard before adding things to make sure that they actually need to be in the core browser. Looking at you, FF Hello.

* Don't baby the user. Everything should be configurable. And existing options should not be changed on upgrades. And general solutions are (always) better than centralized services. Looking at you, Firefox "You cannot install unsigned extensions, period".

* Don't introduce "features" that hurt the end user. Looking at you, Pocket "you now are bound by the terms of Pocket's user agreement when you run FF".

* Don't try to do cat-and-mouse games. Looking at you, Firefox "we must try to prevent malware on the user's computer from taking over FF".

* Don't assume that everyone has the newest and best computer. Looking at you, Firefox "electrolysis tripling memory usage is fine, right?".

On "complicated" web pages, tiny changes in the position of the mouse while dragging (selecting text) can result in large changes in the selection (the parts of the page highlighted in light blue). Sometimes a tiny change in mouse position even causes a whole 'nother column of text to be highlighted.

It sometimes takes many tries simply to select the contiguous words I want to copy. It sometimes takes planning and learning from experience. I would prefer for selecting text with the mouse to be so easy that I can always keep all of my planning and learning faculties focused on the ideas discussed on the web page.

Even on pages (such as the page where this comment will appear) where selecting text with the mouse is relatively straightforward, I would prefer to be able to select a contiguous series of lines (or paragraphs if individual lines is too hard) by dragging in the left margin the way that it is possible to select a contiguous series of lines in TextMate 2 or in Sublime Text 3 by dragging in the gutter (the left margin where the line numbers appear). (Neither Firefox nor Chrome lets me do that with HN's pages.)

In general, I would prefer for my browser to be optimized for "active reading" or "reading broadly understood" (reading plus related activities like copying a short passage from a web page and pasting it into a text editor).

I would probably make heavy use of such a "browser optimized for reading" even if it barfed on "complicated" web pages (i.e., failed to render all or part of pages that use a difficult-to-implement modern web API) provided there were an "Open in Firefox" or "Open in Chrome" item on the right-click menu whenever the mouse is over a link -- or some similar easy-to-implement convenience.

In other words, I think I'd use it and love it even if it was unusable with most pages on the modern web as long as it provides a good experience on certain sites with relatively simple pages, like HN and Wikipedia.

Modularity.I would like to see a browser that is designed as an engine, meaning that no UI/UX, or 'browsing' features are included. Much like a raw linux kernel in philosophy.I would like this ideal browser to have interoperability with various JS engines, HTML and CSS renderers, as well as the standardized specifications for the underlying network protocols. It should be 'safe' by being written in languages where safety can be guaranteed ( with the exception of human error of course ).In essence, if an open source core for a browser existed, maybe we could all work together and build the ideal browser.

"Ideal" isn't one thing. Allowing for personal customizations while following closely the standards make the base for implementing many "ideal flavors" of browsing experience.

From a previous HN post - I want a browser standard for an easily optimised subset of html technologies. To conform to this standard, pages would be restricted in the ways they can manipulate the DOM, have a simpler DOM, use only a small fraction of CSS properties, and not use some JS features e.g. eval, delete.

We can use the asm.js model for opting in. Browsers that support it run the pages super fast, other browsers run them just as fast as usual.

A browser engine supporting just this standard would be considerably smaller, more embeddable, and a nicer base for current webkit based apps (e.g. spotify, steam, or atom). It might also help apps that want to use something like webviews for embedding content but need to be careful with memory / performance.

Yeah, browser manufacturer, I know you want me to use HSTS and you want me not to browse to HTTPS sites without certificates and all that. That's fine. I can understand that (for example) Google wants to be the only org that can track where I'm browsing, not my ISP or the NSA.

But for the love of dog, give me an option to turn all that nannying shit off as and when I want to. My computer, my connection, I'll choose how much information I want to share with people. Not you.

Having the above presents me with the ability to leave GUI web-browsers behind entirely. Ads and the like would essentially be immaterial if JS and images are toggleable and everything would be glorious. Of course, no one appears to want this kind of thing enough for it to have been created yet. So I will eventually probably break down and make it myself :P

Tree-style tabs and the bookmark model to go with it (a bookmark can have a parent, so you can restore subtrees of tabs, each with its history intact).[1]

Scroll below bottom of page as necessary when navigating to anchor links.[2]

Put focus in urlbar when switching to a tab unless the user has already moved it onto the page.

Continue to allow bookmark keywords for custom searches from urlbar (e.g. "w fun" to search wikipedia for "fun"). This still works in Chrome and Firefox but it gets harder to configure with every release.

History should be sortable by most recent view, where closing or switching to a tab counts as a view. Makes separate "recently closed tabs" menu superfluous.

The reader browser should show you the "web" in a kindle-like readable experience, just as it does today.

However, the application browser, although it does receive a URL, should not have any HTML page as a default view. Instead, a JavaScript should be first loaded, and from there, following the permissions it requests, it can open new windows, notifications, or any other desktop feature needed, which websites that just need to be read do not need.

An open webpage file format which is not markup. Something of the like of YAML, or something simpler to read for a human.

Or maybe compiled HTML (like microsoft .CHM), except open (duh).

Reason ? Parsing XML or HTML is very CPU-intensive, and cheap smartphone's small CPUs (which have a very low L2 cache) have a very hard time dealing with it, not to mention classic desktop browser memory footprints. If not even regex can do it, why the hell not ? I'm sure the memory footprint of firefox and chrome is incompressible because of the raw nature of HTML. And for the life of me, if nobody can read a HTLM page generated anymore, what's the point of it ? Why not just compile it ?

I guess I could submit it to the IETF, to be honest. I'm not even a software engineer so basically I'm not sure if my idea is right or not, but I'll always find weird that the app-version of websites perform so much better than their HTML version.

In the internet explorer days, this was not possible because firefox and chrome were not mainstream, but I'm sure now is a good opportunity. It could eventually even replace or substitute .DOC and PDF files.

- No tabs, that's the job of the window manager. I get that most window managers are too underpowered to replicate browser tabs. Stop using those window managers I guess. Note that this gets you tab isolation for free, since every "tab" is just a completely different browser process. It hardly wastes any memory, too, because of dynamic linking.

- No features. I want to be able to set the url, search, have back/forward buttons, zoom the text. That's it.

- Extensible in a Unixy way. Press a key and execute a program with some hooks to modify the browser.

So far suckless's surf browser fits the bill. I currently use surf with a patch that lats me search duckduckgo from the dmenu url field.

- Support for privacy enhancing extensions. NoScript, Block, PrivacyBadger, HTTPS Everywhere, etc. I'm trying to see how these could work as a component separate the browser and I'm coming up blank on how to present the UI nicely. Currently I use privoxy for this, but it's subadequate.

* Something other than javascript as a compilation target when using something else for those of us allergic to JS (scalajs.) I've only looked at it briefly but WebAssembly looks like a good candidate for this

* Less feature bloat, remove as many features as possible from the browser core and leave any non essential feature to plugins.

A content filter plugin, that allows me to block content semantically. Every year I feel the net gets swamped by certain events which affects my browsing experience. Halloween and the Superbowl are fairly regular, or the football world championship. People on facebook, imgur, twitter or 9gag and so on then just can't shut up about it. I would like to take notice of a new image of Pluto and then click "seen" and have the similar pictures blocked on imgur, twitter and news sites.

I would like to have this as a browser feature that I can control and easily change, rather than just a plugin. Adblock Plus would be a similar idea but I wish I could automatically teach it to block even more.

Vertical Tree Style Tabs (aka, Hierarchical Tabs) where opening a new Tab will make it a child tab of the original Tab.

Virtualized Tabs that unloads completely when it is no longer visible on the Tab Bar to save memory and CPU processing.

NoScript built in.

Ability to write Extension in any Language, aka, the Extension API is exposable to all Languages.

Tabs opened in the background should not start playing Flash automatically. Only once the Tab is selected, does Flash play, and continue to play in the background after moving to another Tab. Should be able to right click on the Tab and Allow Flash to Continue Playing in the Background.

To not make me jump through 7 hoops until I can enter a self-signed https site and verify its fingerprint. Meanwhile they don't complain about http sites (which is reasonable), I don't know if they complain if you fill out a form with a password field on a http site though.

It would be nice if they showed a nice visual fingerprint too, although it's hard to prove their safety.

Apart from customizability, security and decoupling of UI changes from API/perf/security fixes:

- Option to stop all audio/video in all tabs

- Lazy session restore

- Reliable "save for offline viewing"

- Decoupling of "read later" from bookmarks and a separate interface for both

Going wild:

- Automagic unloading, archiving and clustering of opened tabs, perhaps with an auto-extraction of TL;DR from long articles

I very often open lots of pages (from HN etc.) but have no time to read them all at the time of opening. They linger as background tabs until the background tabs count is so big so I have to close them all and probably never come back.

Would be cool if the browser was able to somehow unload and archive unused tabs (to free some memory), and perhaps automatically group them into several categories: say, "angularjs", "bash", "youtube", "news" etc. and provide a good interface to return to them later.

However due to sheer amount of links I follow, my problem might be unsolvable :)

-Easier text selection on e.g. websites where all the text is links or weirdly placed dives, basically a mode where anything that's text or looks like text can be selected and copied as plain text. And somehow don't surprisingly select all text of the website just because you started dragging from the right side of some sentence.

-Less continuous disk usage for caching and stuff, batch all disk writes together every now and then or so

-Something to block the new type of popup, the type that brings some thing to the foreground and shades the background

-Something to block all the annoying European cookie warnings, I don't need them, I already know websites use cookies

- Search through them better (by indexing their content and subject, autolabeling while allowing custom labels). (As a side-note, star-searching in Firefox is an undiscoverable feature; the new tab page should offer a way to do that.)

- Give a visual organization la Desktop / iOS app layout. Currently, the new tab page gives the six most common sites, which subconsciously forces me to forget about the seventh most common site I visit.

- Give a neat access to offline webapps. Right now, going to one is inconvenient.

Most of all, include tab freezing by default (to remove the memory, stop the JS, etc. without having to close the tab)

MOBILE: when I zoom a page the browser should treat this the same as if I change the window size on a desktop browser, and reflow the text. Mobile browsing is a really lousy horrible experience because there are some conflicting philosophies.

- immediate disclosure of all security problems (in the hope they get fixed promptly). the socalled "responsible" delayed disclosures annoy me to no end. let every exploit be a 0day exploit and leave it to the user to decide, at least it'll be an informed user!

I'd like a strong "project" concept: a project could be a set of multi-tab windows, there'd be fast switching between projects and fast tab selection based on projects. Most computers nowadays have a lot of RAM and people use lots of tabs. It seems wrong that one resorts to public browser extensions to find ways to navigate through the tabs.

Possibly also tree-like relationships between tabs so that subtrees of tabs can be operated on as a unit.

Ideal web browser was here already, Opera between ~8 and 12 had everything from technical and user experience point of view. I could configure almost every option globally _and_ on top of that change behaviour per page. I could do whatever I wanted with UI. I was in the driver seat at all times.

I know this is crazy but I want there to be a service where I can subscribe to a number of websites, and every week I get a printed hardcopy of all the content that I can leaf through. Eco-greenie-ologists be damned, I want my degradable, ephemeral paper to leaf through while lounging in a rocker chair drinking ice tea. Civilized. Now that's a browser.

Solves the security issue right there, aint nobody tracking me now. I'd like to see 1337 kidz xploit that paper. Escalate that privilege , from my rocking chair! And let me choose from a number of layouts. The smell of that fresh printers ink, nothing like it!

Also, I feel like inspiration from the early web browsers should be taken. Tim Berners-Lee's book "Weaving the Web" fascinated me and I think that we can learn from both the current and the oldest designs of browsers.

Even if i open many tabs shouldnt freeze or crash, Thats one of the most important thing i care about, Mostly firefox does that, keeps crashing if you open many tabs.

Would be great if allows to sync with mobile, like if i enjoy a website and display right away on my mobile, instead of using extension it should the out of the box. We are living on a mobile world now.

My ideal web browser wouldn't be a browser at all, but instead a bunch of "do one thing and do it well" components that I can piece together to do things and swap in/out as necessary. I'd like to be able to swap rendering engines, Javascript interpreters, UI components, plugins, extensions, etc. in and out with maximum modularity and flexibility.

I'd also love for there to be a Unix-ish interface for browser plugins/extensions that isn't dependent on a specific language (or, if it is, for that language to be something C-compatible for maximum FFI compatibility). The more I can do without touching a single line of JS, the better.

I've wondered about where UI and UX is going for a few years now. I think it's one of those areas where, if it weren't for the fact that corporate involvement would categorically be too politically incorrect, good (GOOD) ground-up UI/UX is a completely un-tapped field.

A few months ago I was thinking about the old MinWin improvements (to Windows' basic core services), how Windows 8.1/10 are (arguably) smaller and lighter than Vista, etc... and it clicked: Microsoft have realized they're no longer the "hardware industry killer app," if you will, and have moved out of the way... to let the Web take its place.

In my opinion, Web browsers are basically mind-bogglingly complex rube goldberg machines, based on conflicting standards that are also rube goldberg machines, and the whole scene is basically meta-rube-goldberg-ception.

A lot of the complexity and conflict is mostly due to the history and tradition behind the technologies we're using: on the one hand, all you want is arbitrary sandboxed code execution and sane UI; on the other hand, sites start delivering content exclusively via JS and everyone gets mad. And in the meantime, who audits their web browsers? What was that about "safe" code execution, where the browser protects you from "nasty" code? We hear about the browsers themselves doing the wrong thing by users almost every week.

We need to fight this. I've come to the conclusion that the only way this can be done is to simply make the effort and do the hard graft to port a bunch of existing applications to a new coherent, practical modality/paradigm, dump the whole thing on an unsuspecting world, and wait to see what happens next. It might catch on. It might not. Get feedback, try again. Keep trying until it goes viral enough to make a dent and improve people's lives.

There are so many interesting and fascinating UI experiments out there, but nobody seems to want to commit to actually practically trying out a few of them in real applications :( and I think that's what's holding everything back - everyone's waiting for everyone else to make the first move.

Here's where I'd start: everything should be able to send messages to everything else, to work around the language problem; everything should be an object with arbitrarily settable properties - everything from the files in the filesystem to the windows on the screen; with the appropriate security context surrounding everything, you could do crazy things like programmatically share the tags you attach to the files you share over P2P, or tag images with text descriptions of their contents; the console should be inherently textual but in such a way that it is exclusively touch-gesture-drivable; I strongly believe in the anti-mac/post-mac UX paradigm; I believe that it's impossible to create the "ultimate" solution that will work for everyone, and that all I can ever hope to do is nudge everything in what I think is a good general direction. And the only sane way to release an implementation like this is to put it into the public domain.

Agh, this probably reads like a rant, and I guess it is. I'm just not sure where to start, although I do have some ideas. Incidentally, I frequently use "asmqb7" on the web, including for my Gmail account.

It makes it harder to make changes. The story you start telling is not what you end up with later, after you've completed all the non-trivial features and major assumptions have fallen through. Going back and fixing the story as you go along is expensive. Writing the story after it's done is too late - the business value is in the product's shipped functionality, not in the development artifacts.

We have an alternate method of understanding how software developed, which is to look at revision control commits. This method falls more in line with the techniques of development and the genuine evolution of the codebase. Recall that revision control methods were still being improved well after Knuth wrote about literate programming, and the available systems, where people used them(and a lot of shops didn't), weren't nearly as fine-grained back in the 1980's.

Personal experience: I tried using "Leo", an outlining and literate programming text editor, for a project. Although the documentation capability was nice temporarily and gave me an additional method of structure and organization, the hooks messed around with some formatting and refactoring operations, and most of the time, the benefit wasn't clear. The time I spent on the documentation could have gone - from my current perspective - into making the code smaller and simpler. At the time, I didn't know how that would be possible, thus I focused on defending against the complexity by adding more.

A lot of our preconceptions about what makes code both look good and behave well are temporary. That makes it hard to come up with a sensible system of organization, as we'll put effort in to enumerate and categorize only to discover that it falls apart.

It does survive, in a certain sense, in scientific programming and data science. Both iPython notebooks and Rmarkdown are a sort of literate programming, although with the emphasis on the text more than the code. In that setting, the executable artifact is not really more important than the explanation of why the code does what it does, so the extra overhead is justifiable.

I've been using literate programming for 15 years on many projects. The largest and most visible one is Axiom(https://en.wikipedia.org/wiki/Axiom) which currently has many thousands of pages with embedded code.

I've talked to Knuth. He claims he could not have implemented MMIX without literate programming. Literate programming is really valuable but you only understand that once you really try it. I gave a talk on this subject at the WriteTheDocs conference:https://www.youtube.com/watch?v=Av0PQDVTP4A

There are some "gold standard" literate programs:"Physically Based Rendering" by Pharr and Humphreys won an academy award. "Lisp in Small Pieces" contains a complete lisp implementation including the interpreter and compiler. The book "Implementing Elliptic Curve Cryptography" is another example.

Suppose your business depends on a program. Suppose your team leaves (they all do eventually). Suppose you need to change it... THAT's why you need literate programming. Nobody is going be around to remember that the strange block of code is there to handle Palm Pilots.

Companies should hire language majors, make them Editor-in-Chief, and put them on every programming team. Nobody checks in code until there is at least a paragraph that explains WHY this code was written. Anybody can figure out WHAT it does but reverse-engineering WHY it does it can be hard.

Imagine a physics textbook that was "just the equations" without any surrounding text. That's the way we write code today. It is true that the equations are the essence but without the surrounding text they are quite opaque.

Imagine how easy it would be to hire someone. You give them the current version of the book, send them to Hawaii for two weeks, and when they return they can maintain and modify the system as well as the rest of the team.

Do yourself a favor, buy a copy of Physically Based Rendering. Consider it to be the standard of excellence that you expect from a professional programmer. Then decide to be a professional and hold yourself to that standard.

Programming occurs in a wide variety of contexts, and different tools and workflows are optimal in different contexts. In the same way that I find interactive programming in Common Lisp optimal for exploratory work in a complicated or uncertain domain, I find literate programming to be optimal for work that requires rigor in a domain with little uncertainty and static requirements.

Literate programming hasn't "taken off" only in the sense that few people are performing the type of tranquil and rigorous work it was made for. Much of the (admittedly difficult) work being done by programmers today is in fact trivial. The difficulty comes from attempting to solve ill-specified or constantly changing requirements by glueing together a constantly changing set of frameworks and tools.

However, I would suggest that even in organization whose primary responsibility is wrangling with a messy soup of ill-defined requirements as fast as possible, there are often sub-problems whose treatment is amenable for the use of literate program, such as a library implementing a unique and non-trivial algorithm. In such cases, it can be worthwhile to carve out an island of tranquility, clear prose, and rigor, even if it means using slightly different tooling than the rest of the project.

Literate programming is based on the idea that you should explain what software does and how it does it in detail so that a reader can follow along and learn. That works great for TeX, which hasn't changed significantly since 1982. It works less great for say, Google/Alphabet, which wasn't even the same company last week.

The general problem with documentation is that it gets out of date as the software evolves to fit new requirements. Most real-world products face new requirements on a weekly, sometimes hourly basis; as a result, most fast-growing startups have oral cultures where the way to learn about the software is to ask the last person who worked on it.

I've been trying to write a JavaScript framework in a literate way for a year or so, here's what I've found:

* I end up deleting most of the prose once the code starts getting good. Good code is sort of literate already.

* As others have said, when you're doing some code churn, it's difficult to maintain a narrative structure that makes sense.

* Existing frameworks, at least for web programming, encourage you do draw boundaries around individual homogenous chunks of one type of code (router, view, migration) rather than human conceptual concerns (upload a file, browse my photos, etc). In order to do a good job explaining what a view does, you need to know what the controller is providing. In order to understand that you need to understand what the domain layer is doing. Frameworks just make it really hard to put, in one file, everything necessary to explain a concern.

I still believe in the idea, but I think for literate programming to work well it has to be done in an ecosystem where the APIs are all structured for literate programming, which doesn't really exist (yet).

Programmers often say comments are for describing algorithms -- especially hairy ones, but it's a straw man: The code does what it does, and the comment doesn't enter into it. If anything the comment can confuse because programmers don't usually read code, but can find it easy to agree with the comment so they move on.

I think that the decision to bring code into this world is not one to be taken likely, and a literate program is simply the story of why interwoven with the implementation of what: Where did -2 come from? When I ifdef for a FreeBSD bug, how will I know if the bug is fixed (and the code can be removed/changed?) And so on.

Literate programming isn't the only "solution" to this problem. Making programs really big by duplicating efforts, and working around workarounds, using Java seems to "work" (for strange values of work), so perhaps this is a blub thing? If your code is "self documenting" then you don't know what documentation is.

That is to say: Literate programming didn't catch on because it was dismissed by the larger number of programmers who could get "things done" who didn't understand literate programming.

It did catch on, just in a different form. Our web shop is fairly typical of that. We do this with a combination of the Tomdoc (tomdoc.org) documentation specification plus Rubocop (github.com/bbatsov/rubocop) and peer review for enforcement. We use rubocop to ensure that methods are short and simple, and every such method that is public is accompanied by a tomdoc section. The result is that there are about twice the number of lines in our code file that are targeted at humans than computers. We generate separate documentation by extracting the tomdocs that has proven useful in explaining the code to the uninitiated.

However, to the initiated it's mostly in the way. With short, simple methods I find it easier to decode unfamiliar code by reading the methods than the by reading the tomdocs. Like many of my cow-orkers I've configured my editor to hide the tomdocs in normal use. Writing tomdocs is a chore to be done immediately before delivering code for peer review.

That's probably the biggest weakness of literate programming: it isn't for the programmer responsible for that code, or even for that programmer a year later when she has forgotten much of it. It's more for the developer or designer that isn't fluent in the language, but still has to interact with it. Since the value to the actual coder is distant and indirect, while the work of producing it is immediate, it tends to be an early omission under any kind of stress. In our case it would disappear if not enforce by peer review.

My pet theory is that programmers are driven by a constant feeling of obsolescence: Most implementations are incredibly short lived so that it seems futile to optimize the code for understanding (literate programming), when much less (programming experience, comments and help by people who know the code base) is good enough. Especially the last point in parentheses is crucial: Asking someone who knows the code base is likely a more efficient superset to text, because asking can be selective, nuanced and individual while a text just stares back at you.

The project I worked on was a decade-long piece for a consortium of defence departments from various countries. We wrote in objective-C, targeting Windows and Linux. All code was written in a noweb-style markup, such that a top level of a code section would look something like this:

<<Initialise hardware>> <<Establish networking>>

and so on, and each of those variously break out into smaller chunks

<<Fetch next data packet>> <<Decode data packet>> <<Store information from data packet>> <<Create new message based on new information>>

The layout of the chunks often ended up matching functions in the source code and other such code constructs, but that wasn't by design; the intention of the chunks was to tell a sensible story of design for the human to understand. Some groups of chunks would get commentary, discussing at a high level the design that they were meeting.

Ultimately, the actual code of a bottom-level chunk would be written with accompanying text commentary. Commentary, though, not like the kind of comments you put inside the code. These were sections of proper prose going above each chunk (at the bottom level, chunks were pretty small and modular). They would be more a discussion of the purpose of this section of the code, with some design (and sometimes diagrams) bundled with it. When the text was munged, a beautiful pdf document containing all the code and all the commentary laid out in a sensible order was created for humans to read, and the source code was also created for the compiler to eat. The only time anyone looked directly at the source code was to check that the munging was working properly, and when debugging; there was no point working directly on a source code file, of course, because the next time you munged the literate text the source code would be newly written from that.

It worked. It worked well. But it demanded discipline. Code reviews were essential (and mandatory), but every code review was thus as much a design review as a code review, and the text and diagrams were being reviewed as much as the design; it wasn't enough to just write good code - the text had to make it easy for someone fresh to it to understand the design and layout of the code.

The chunks helped a lot. If you had a chunk you'd called <<Initialise hardware>>, that's all you'd put in it. There was no sneaking not-quite-relevant code in. The top-level design was easy to see in how the chunks were laid out. If you found that you couldn't quite fit what was needed into something, the design needed revisiting.

It forced us to keep things clean, modular and simple. It meant doing everything took longer the first time, but at the point of actually writing the code, the coder had a really good picture of exactly what it had to do and exactly where it fitted in to the grander scheme. There was little revisiting or rewriting, and usually the first version written was the last version written. It also made debugging a lot easier.

Over the four years I was working there, we made a number of deliveries to the customers for testing and integration, and as I recall they never found a single bug (which is not to say it was bug free, but they never did anything with it that we hadn't planned for and tested). The testing was likewise very solid and very thorough (tests were rightly based on the requirements and the interfaces as designed), but I like to think that the literate programming style enforced a high quality of code (and it certainly meant that the code did meet the design, which did meet the requirements).

Of course, we did have the massive advantage that the requirements were set clearly, in advance, and if they changed it was slowly and with plenty of warning. If you've not worked with requirements like that, you might be surprised just how solid you can make the code when you know before touching the keyboard for the first time exactly what the finished product is meant to do.

Why don't I see it elsewhere? I suspect lots of people have simply never considered coding in a literate style - never knew it existed.

If forces a change to how a lot of people code. Big design, up front. Many projects, especially small projects (by which I mean less than a year from initial ideas to having something in the hands of customers) in which the final product simply isn't known in advance (and thus any design is expected to change, a lot, quickly) are probably not suited - the extra drag literate programming would put on it would lengthen the time of iterative periods.

It required a lot of discipline, at lots of levels. It goes against the still popular narrative of some genius coder banging out something as fast as he can think it. Every change beyond the trivial has to be reviewed, and reviewed properly. All our reviews were done on the printed PDFs, marked up with pen. Front sheets stapled to them, listing code comments which the coder either dealt with or, in discussion, they agreed with the reviewer that the comment would be withdrawn. A really good days' work might be a half-dozen code reviews for some other coders, and touching your own keyboard only to print out the PDFs. Programmers who gathered a reputation for doing really good thorough reviews with good comments and the ability to critique people's code without offending anyone's precious sensibilities (we've all met them; people who seem to lose their sense of objectivity completely when it comes to their own code) were in demand, and it was a valued and recognised skill (being an ace at code reviews should be something we all want to put on our CVs, but I suspect a lot of employers basically never see it there) - I have definitely worked in some places in which, if a coder isn't typing, they're seen as not working, so management would have to be properly on board. I don't think literate programming is incompatible with the original agile manifesto, but I think it wouldn't survive in what that seems to have turned into.

The only large project using literate programming that I am aware of is Axiom, a symbolic math system written in Lisp. From their documentation it sounds like it uses literate programming and would be a good resource.

However, a modern version of literate programming is catching on in scientific fields based on Jupyter (IPython) Notebooks. It allows running simulations and embedding results. It's fantastic for exploratory work. The main downside is transitioning code from notebooks to longer term libraries or full applications can be somewhat tricky. Here's a good write up of notebooks and science: http://peterwittek.com/reproducible-research-literate-progra...

There are two parts to literate programming. One is the style of commenting and structuring the code, which makes it easy for humans to follow. The other part is the tooling you use when you want to write literate programs, which includes what syntax you use for defining blocks and how do you tangle/weave your code.

There are many tools which support Literate Programming for many different languages. The usual reservation about additional tools applies: each member of a team needs to have it installed, build times get longer, time for a new programmer to start contributing gets longer and so on. It makes many people never even consider LP.

But, it's important to remember, that the tools you use are just an implementation detail. What's important is an idea that source code should be written to be read by humans, not only for computers to execute.

Sometimes there's a need to go over a piece of code with a colleague who doesn't know it. It happens a lot when a new programmer joins a project that has some code written already. This is because to understand the code you need to know the context it was written in. The problem is that programmers often don't document this context enough (or even not at all). This means that reading the code is essentially a reverse engineering someone's thought patterns. It's much more efficient just to sit next to the person and assist him in reading the code by providing a live, context-aware commentary.

LP is "just" that commentary written directly in the code. What's important is that you don't need any special tools to use this style in your comment if your language is flexible enough. Most dynamic languages nowadays are capable of supporting LP style. Don't take my word for it, see for yourself. You can just go and read some LP code. A couple of examples:

As you can see it's a plain JS (or CS). The pages were created with "docco" tool, but you can read the source with most of the same benefits (excluding rendering of maths symbols, which docco doesn't support anyway).

To sum up: LP is not dead, it just changed its form a little. Many people adopted (or invented independently) this style of code structuring and commenting. Many real-life codebases are written in a literate style because it makes a real difference on how long it will take for someone new to grok the code. Such codebases use docstrings and other mechanisms available in the language to do exactly the same thing that previous LP implementations did.

Literate programming tries to make every line of code traceable to English (or some other natural language). It's as hard as writing the same program twice in two languages. Perhaps harder: one is for programming a modified lump of sand. Another is for programming humans. The latter is a lot harder to do well than the first.

Then the question becomes: which one is correct? Maybe it's just easier and cheaper to write in the language the lump of sand understands and be done with it.

I find that literate programming is something of a code smell. If a program is so complicated that it requires that much commenting, something went wrong during the design process. The program should be the most concise and clear description of what is going on. That is the point of writing a program, to describe the problem to other developers.

This is just me, but when I read through the literate programming book, and the hundred or so pages of literate code resulted in a program that could be replaced with a line of bash script, I decided that writing the program succinctly was more important than writing a novel to accompany it.

I always liked the idea, but it seemed too indirect to me. Software is hard enough as it is, without adding yet another hurdle to get from brain to .exe. IDE's are probably the best middle ground, as they "know" enough about your code to help you find the parts you want.

Besides, literate seems to go against the current view of overcommenting as an anti-pattern.

I've seen a lot of Literate Haskell in tutorials and course materials, but not really ever in production code. It's too cumbersome to work with when comments are the default and every line of code has to start with '>'.

2) Tooling/syntax is a big part of it. I like literate programming, but most syntaxes for it turn me off. Some of it also seems very tied to particular languages. None of that helped for a concept that was always going to be a hard sell.

It uses markdown where headers are the section headers, code blocks in markdown are the code blocks to sew together, and _"header name" is the block syntax. It has a bunch of other features, but that's the core.

My hope is that this might eventually help this style to catch on in some quarters.

4) I am just a hobbyist programmer, but what I enjoy about it is the ability to organize my code in any fashion I like. In particular, I can keep chunks to a screen size. Brackets never go beyond a page. And I can stub out anything I like real easy.

Now in many programming languages, small chunks are easy to achieve in the terms of functions or objects or modules or even just variables. That is, one of the most important in-the-now useful parts of literate programming is implemented in a good-enough version, particularly with good naming conventions and decent commenting. And good enough is what keeps many from using optimal practices. Or rather, and this is important, optimal from one perspective, e.g., literate-programming can easily rub up against "no premature optimization".

On the other hand, I like not using functions for code management. I want functions to be used when a function is really needed. But that's just my preference. I also like being able to see the whole construct in the compiled code put in one place instead of having to trace it out through function calls. But I have never been big on debugging tools; if I was, this would probably be less of an issue.

5) Updating does tend to be a problem in that with the excitement of a new feature or a bug fix, it is real easy to leave bad documentation there. But that would be true of any documentation. Here at least one can quickly look at the code and see that it seems off.

6) One key feature that I like about my system is the management of multiple files, really, a kind of literate project management. I do not know if the other systems did that. This is a game changer for me. When I open a foreign code base, I have a hard time knowing where to start. In any particular file, I can see what is going on, but getting the global perspective is what is missing. Literate project management can tell you what all these files do, do pre and post compiling options (linting, concatenating, minimizing, testing, dev vs production branching, etc.), and allow a true global organization of where you want the code to be. You can have all code, styling, content for a widget all in one place. Or not. There are no constraints to your organization and that is awesome.

It is also a downside. Constraints are powerful tools and when you have a system that allows you to do anything, it can lead to severe issues, particularly (ironically), of communication. I could see teams benefiting greatly from this if they agree on organizational principles and if not, I can see this exacerbating the conflicts.

7) The hurdle to get over is "Is it going to make it quicker to get my code done?" And I don't think previous tools have done this. I am hoping my tool will do this for the web stack. That stack is a mess and we need organization for it. For other programming languages and tasks, I don't think this is as glaring a need. It often feels a lot like just reversing the comments as literate-coffeescript seems to be. In the hands of a master, such as Knuth, a literate programming is a gem of wonder. But for most, including me, it is a different beast and may not be that pretty.

8) Programmers may have an irrational fear of writing. As a mathematician, I see many adults, even programmers, fear math for no reason whatsoever. The same may be true of prose, at least sufficiently so to discourage the desire to use this. Note that I think they could do it, but that they think they cannot. But I am an optimist.

It did. It's called culture. You just didn't realize all the ways it programmed your biases and perceptions.

Why?

Because it was so successful.

Computer programming, by contrast, is so explicit and obvious. The subtlety is lost. And with it, our humanity ( and ability to be subtly manipulated by forces beyond our comprehension and below our level of conscious perception ! ).

Culture is the original literate programming language. Instruction pointer for the collective mind.Virtual machine of choice ? Books. And your reading of them.

There is subtle difference. The former is writing code first, then write documentation to explain the code (without changing the code significantly). For the latter, one may still write code, but he is not writing the code just to get computer working; rather he is writing code for the first purpose of communicating (to human).

In the first style, the program, stripping away documentation, is pretty much a working code as is. Yes, in many so called literate programming, the documentation are readily to be compiled into pretty web pages or pdf, but they are just pretty documentation. In the second style, the code is, to large extent, rearranged (to the computer, scrambled) due to the need of expressing ideas to human. Often a complex parser program is needed to re-arrange the code into computer acceptable form -- such is the case of Knuth's WEB.

Maybe I am over guessing, but I think many readers are only thinking in the first style (documentation+code) when they are commenting on literate programming.

And maybe my interpretation does not even fit Knuth's original idea of literate programming, but in my interpretation, the ultimate literate programming is just code, in the style of written language, arranged like a book, and readable by most literate readers (who possess the basic background -- the background knowledge of the problem domain and the background knowledge of how computer runs, in addition to basic set of vocabulary) as is, and with a compiler, can be translated into a formal programming language or machine code directly and run by the computer. I find Knuth's example -- writing two versions of the program (the code and the documentation) -- a compromise due to lack of compiler power and impractical -- who, after spending so much effort get the code written and debugged and barely worked, still have the energy to write article to explain it -- especially with no apparent readers in sight?

EDIT: In a high level view, there is just one code, but two groups of readers/listeners -- the human group and the computer machine group. In the first stage, computers are limited in power and parsers/compilers are dumb, so the code has to cater for the machines, and have the human readers stretch themselves to read the code (in so-called programming language). In the next stage, every day computer is powerful enough and it can take in more background knowledge (common vocabulary, idioms, styles and some common algorithm, scientific facts, international conventions, or individual/group/corporate conventions),and this stage will allow code be written in some sorts of middle ground. Then the final stage is of course with AI that can understand most human communications. I think we are ready to enter the early second stage -- there is capabilities and early signs, with most people's mind is still well stuck in the first stage.

If it is really only a choice between those two, I'd go with C#/.NET for a number of reasons. The main thing for me is that it is object-oriented. To head off a possible complaint about .NET, with the mono project, you don't have to run your code on Windows. That leaves a lot of options open. We run a rather complex .NET application on CentOS using mono without any isssues. One thing to keep in mind, though, is that most newer programmers don't learn C#. You may be able to find people easily that are good with it, but they are likely to be older and more expensive. This may not actually be a downside if you are looking for experience, but I find that older .NET devs tend to be in the 1 year of experience 30 times group rather than the 30 years of actual experience group. This is solely based on my personal experience, though.

I am a c# developer of many years, and I know just a little of what GO is about.

I would say it depends what you are trying to achieve.

If it is a regular old web application then .NET will shine, giving you the MVC5 framework which is similar to rails, excellent database mapping, a well integrated web server, authentication and other web concerns out of the box, integration of odata. Let alone the strong typing and excellent generics which is probably the best of the C++esque languages (but its no Hindley Milner but that isn't of much practical importance for a startup).

Maybe use GO if you need it to run cross platform, need to do some insane performance tuning or heavy systems programming. I.e. you are starting a digital ocean or something like that.

Running .NET on linux is possible but may be more limiting. So you are probably running on Windows and the server costs could be higher BUT more than paid off by saved developer costs.

Of course you are also free to use both GO and .NET, using GO where it shines and .NET for the rest of the more prosaic businessey stuff.

On hiring - you will find more .NET devs for sure. Also .NET has been around a lot longer, C# is always getting great new features and there is the excellent F# if you need to do functional programming.

Your biggest consideration as a startup is rapid development and time to market. .NET will get you there faster. Click a button and you have a boostrap-designed, authentication enabled application with a DB back end in a few seconds that you can easily extend. You can get an MVP out in a few hours in .NET.

Without knowing more about your application, I would say it is 99% likely .NET would be a better choice.

I'd base it on the language and infrastructure/OS I/my team knew best. The worst thing for an early startup to do is to try and figure out new languages or tools when it isn't absolutely necessary. You have enough hard work to solve the business problem, so pick what you are familiar with.

Also, in the end, you will likely change your structure more than once from the first MVP, so I would just make a decision and move forward fast.

As for my opinion. C# is still primarily a Windows environment solution (although its getting better), Golang is a little bit more agnostic but I wouldn't use it anywhere but in a linux environment. My choice would be golang if those were my only two options, mostly because I feel the ecosystem, scaling and cost is better not to be in the Microsoft environment for a startup. However, if you are planning for a Windows based environment, then nothing beats C# IMO.

There are completely valid options that are neither of these languages, nodejs, python or some JVM based languages. I generally avoid the JVM, but that is a personal preference based on my experiences and I recognize plenty of amazing systems are built on JVM based languages all the time.

At least for me, since I have a second 3rd party email registered with gmail, if a new device logs in, I will get an email saying there was a new login. 2 factor auth is even better, but a little more of a hassle.

Freelance at a software or marketing shop in the area. They'll often take part time work, especially if you have an expertise in a "hot" area. I would personally just pick up the phone and call some consultancies and ask to speak to the Director or VP Engineering, or even just ask for their email address.

Hands down, the TR1200-DT3 is the best treadmill desk out there right now. Their bluetooth app is crap, but as a treadmill actually designed for office use, this is perfect. Read this amazon review for ways to customize the programming to be less annoying:

Just a note for all prospective treadmill desk operators. DO NOT use an regular treadmill thinking that you're beating the system. Those things are not made to be used at walk speed for hours a day non stop, you will destroy the motor.

[1]: Most office treadmills are designed for 1.5-2 MPH slow walks because it's hard to type while jogging, let alone running. OTOH, using a computer while biking at 13-15 MPH isn't hard, and using a tablet is easy. More: https://en.wikipedia.org/wiki/Metabolic_equivalent

I did recently change my home office to treadmill desk. I'm from Finland, so I won't give any product recommendations. One thing I noticed it is very hard to find information about treadmills that you don't plan to use just for running, and might need to lose the handrails.

Long answer would depend on questions like how much space you have, how much do you weight, budget, planning to run also, do you have a desk already and how adjustable it is, and so on.

I think I only found one site on the net that talked about making your own treadmill desk. As the luck would have, he used the same cheap model I managed to track down (about $200). If you go cheap, it probably fits better and you can get rid of the handrails if need be. If it's more expensive, it probably is so sturdy that your standing desk needs larger adjustments to fit around and on top of it.

For me the Ergotron setup I have needs heavier setup to wall, but other than that, things work fine. When this cheaply made and assembled treadmill I got breaks I don't know if I give up on the concept, since I'd really like to use bigger and sturdier treadmill, but that takes so much more space.

Or you can get specifically for desk use made treadmill and even a desk to go with it. 2000 was the web price here.

I've used a Tread Desk (1) treadmill daily for many years with no maintenance or issues. Just sold it recently before a cross country move. Mine lacked any data integration, but that may be available in the newer models. It's just a flat, low gear treadmill with a control head on a cable, so you can use it with any standing desk or engineering cart.

First off, awesome plan. Some questions to help narrow it down.1: How long have you used a standing desk?2: Do you use it all day or switch back and forth?3: Are you going to want to switch between a mat and a treadmill?4: What kind of desk do you have?

It's hard to see the value proposition of a bespoke freelance programmer hourly billing application versus a general purpose book-keeping application familiar to accountants, backed by regular support, and having been debugged over many years of field deployment.

What makes your solution better than Quickbooks or GnuCash?

What percentage of the market for free-lancer programmers can a bespoke product capture?

Why go through all the development effort of a book-keeping program and then only target it at a very limited market?

I think that if you look at elance/odesk/upwork, you can actually rule out all of those developers because they get paid through the upwork platform - they wouldn't be sending invoices based on their git history. They might have other clients that they invoice directly, but I wouldn't count on it.

I did a market sizing on "programmers" ( not just freelance ) about a year ago, and came up with around 20 million worldwide. If you take the statistic that 40% ( by 2020, or 35% today ) of US workforce is freelance and apply that it would be around 8 million freelance programmers worldwide.

Perhaps a really cool way of doing this sizing would to use "authorship attribution" techniques over webpage javascript to see how many "authors" there were -- tho that could likely be way off as well. Seems like a ridiculously involved way of calculating it tho.

Build one with "spare parts" you have laying around and then try it out first and see if it's for you. I've seen a few people go out buy a fancy standup desk and then decide it's not for them. Don't worry, they aren't for everyone.

If you really like (and it takes a good month for you feet to get conditioned to the change) then you'll have your answer :)

I went down the route of trying to build one, and it's simply not worth it. To get to a point where you can easily adjust the height on a homemade desk is really, really difficult. You're much better off (both in terms of time and finances) with going with a prebuilt solution.

Here's a few of the commercial options that I considered:

* Crank-adjustable desk frame: www.amazon.com/Ergo-Elements-Adjustable-Standing-Black/dp/B00YE6CRY8 with an IKEA desk top, perhaps. I also considered using a solid wood door that a friend was going to give me, but it was quite heavy and looked pretty bad.

* A fixed standing desk and a tall stool (this is likely the cheapest option and would be the easiest to build yourself). Nothing in particular that I can link to on this one, but if you can find something that has the desk top at > 40" from the ground, that's probably a good candidate. I'm 6'0" and my standing preset is at 43.5" (sitting is 27" if you're curious).

* NextDesk - this is the one I ended up going with. I got the Terra (http://www.nextdesks.com/terra) and I'm very happy with it. It's expensive, but it felt a lot more solid than many of the other options that I looked into, and at the end of the day, it's holding a lot of expensive things. I don't want any issues with it, particularly those that result in the damage or destruction of my electronics.

A question, though: you said you didn't want electronics or a motor. I'm curious - why not? I'm assuming you're a developer, and you're going to have a computer at your desk, so there's likely power nearby. Is it a philosophical thing or something?

I just noticed that IKEA has a new product called SKARSTA, which is a hand-crank standing desk. This is different from the electric IKEA standing desk that others have mentioned. Lets see if this link will work: http://www.ikea.com/us/en/search/?query=SKARSTAps. I do not own this product and can not recommend for or against it, just saying that it exists.

Buy & get an extended warranty. Then get back to working on whatever it is that you do, that you're good at.

If you're good at woodworking, build it. You can be better than a warranty- be your own repair guy. I've never checked, but I would imagine there's a community online which can point you to guides & plans/prints.

I like the trestles you can get at IKEA and putting a large table top from IKEA on top of them. The trestles look very DIY / workshop / cave like and you can adjust the height. I'm not so tall so if you are more than 6 ft something you may not find it high enough.

If you don't find any table tops to your liking you can buy solid wood fireproof door blanks at a hardware supply and use that instead. They have serious heft and will last and are relatively cheap.

Having a good high stool to sit on when you don't feel like standing is also useful.

I will suggest that one way to find big problems that can make a major difference if solved would be to look for things people talk about as a necessary evil. It signals that they know it sucks as a solution, having no solution is so much worse that they are willing to accept the downside, and they can't even imagine a real solution that lacks that kind of big downside.

I have seen and witnessed this proposition in many areas of society. In my opinion, this stance is based on the idea that a given person's lifetime is all that matters. It has completely no concern for the future of humanity or the sustainability of the greater system.

You may not be discovered on your deceptions now, but the effects of them have lasting detriments. And sometimes those lies may come back to bite your children, your nation, your race, your species, or even your planet in the long run. In the social sense, you are a representative of any group in which you affiliate. In the flesh sense, you are a representative of your genes. In the practical sense, you affect the world around you.

It depends where you're at with the PHP stuff. If you're using a LAMP stack (as you mention) but using something like MAMP/XAMPP and keeping it simple, staying away from the terminal or PHP frameworks like Laravel, etc then most of this other stuff will be hard for a bit. Ruby on Rails is always talked about as being "easy" but it's really not at first if you're lacking knowledge of things like package managers, command-line tools, deployment that involves application servers and deployment scripts, MVC patterns, etc.

I'll say this: if you've been sticking to PHP to avoid all these things I mentioned then you'll do yourself a favor by picking almost anything (I'd say Rails or a Node stack) and getting into it. Once you get the concepts of these stacks you can use that knowledge to jump to other stacks a lot easier as well. Eventually it all feels kind of similar. You'd even be fine to stick to PHP but would be a much better PHP developer after nailing some of those concepts.

They're relatively easy to learn, well-documented, and are pretty in demand on the job market.

If you want to take things a step up, learn ES6 JavaScript. It has a lot of very nice improvements, but is a steeper learning curve than just learning new JS APIs.

Regardless of what you do, learn how to use modern, vanilla JS in place of jQuery. There is often no reason to use jQuery these days if you're targeting modern browsers. With `document.querySelector`, you can even replicate the selection capabilities of the jQuery `$`.

The current project I have is what I've listed and going to learn Apache Spark and Elasticsearch. I'm currently stuck on learning Ansible to provision stuff.

I think many worthwhile things are going to require some learning curve whether it's steep or not is more up to the individual.

I'm putting off AngularJS, EmberJS, React stuff. I think it's to early. Likewise Docker and container are too early. I'm waiting on perhaps Docker 2.0 and some technical book out. Kubernates in my personal opinion is really an Alpha software there are many caveats.

I'm thinking of moving to Django/Python stack in my next project and tinkering with Apache Accumulo.

Don't obsess about changing too much. Speaking with a colleague, he was asked why he chose mainframe as his career.

"It doesn't change much. COBOL, DB2, CICS, JCL, etc. I can learn them and the applications to a deep level, and not worry about that learning going out of date. That lets me focus on getting deeper and understanding the business applications of why we do what we do."

Every answer you get here will be pretty much useless to you unless you describe the kinds of web projects you expect to do going forward. Your current stack may be perfectly suited, or you may have been using an inappropriate stack for a lomg time and making life harder for yourself.

"The right tool for the job" requires consideration of both the tool and the job.

Ember and rails compliment each other very well with many gems like active_model_serializers and devise on the rails side and many add-ons for ember like ember-simple-auth-devise. ember-cli saves weeks of environment setup and includes automated test support.

I do a lot of work using Postgres -> Grails -> jQuery, and I'm just now starting to think a lot more about picking a fancy new JS front-end framework to focus on. I'm torn between React and Angular, but leaning towards starting to invest time learning React.

Deepmind (http://deepmind.com/) comes to mind. It was acquired by Google though. Their vision it is "We combine the best techniques from machine learning and systems neuroscience to build powerful generalpurpose learning algorithms."

AFAIK they work mostly on reinforcement learning coupled with Neural Networks

It sounds like what you really need is sales person rather than a consultant, no? One thing you may want to do is to show examples of the work you have done on your website with links to the actual sites and the apps.

Along the same lines are the MISRA guidelines, though they are 1) targeted more towards embedded systems and 2) stupidly not freely available. There's an ISO standard for secure C coding (ISO/IEC TS 17961:2013) which is also not free. While you might not get to source document, there are hundreds of sites that summarize the requirements and recommendations.

SANS has a secure coding track worth checking out.

There's a tremendous amount of useful stuff in the NIST SAMATE project.

http://c.learncodethehardway.org/ by Zed Shaw is an introduction to C that seems to have emphasis on writing secure C programs. It's an introduction to C so I'm not sure if it's a comprehensive guide to security in C but it does aim to teach C with security in mind, especially buffer overflows.

"How To Lie With Statistics" by Darrell Huff. It's a pretty old book (1954). But it talks about the most common uses of statistics in everyday life (marketing reasearch and infographics showing extrapolating trends inaccurately) and how the results are often gathered carelessly. Here's a short review by Bill Gates: http://www.gatesnotes.com/Books/How-to-Lie-with-Statistics

I would like to add 'Introduction of Probability' by Joseph K. Blitzstein, Jessica Hwang. I actually have not used the textbook yet but I have taken Prof. Blitzstein's Harvard Stat 110 and it has been the best of all online courses I have taken for statistics. I have also heard very good things about the book. Worth checking out.

The problem sets for the course are available free online. So you can have a look at them to decide.

Almost all of my serious work is being done in either R or python right now, which is a big change from using more proprietary tools like SAS, Stata, and Matlab.

I think I might have been the last person on the planet to figure out that an iPad with a bluetooth keyboard in a coffee shop or library is a very productive work setup and that I do not need to lug my laptop everywhere.

We are living in a fantastic era and I just cannot believe the amazing free tools that are available for things like network analysis (NetworkX) and spatial visualization (ggmap).

When my startup was <10 people, I used Vim and Git a whole heck of a lot.

Now that we're almost 140 people, I mostly use Gmail, Google Calendar, Sublime Text and Evernote, and Google Hangouts for engineering meetings. But, a lot of those people are using Vim and Git, so it's not all bad. :-)

For development machines, I have a company-supplied Macbook Air for work and a variety of laptops and desktops that I use for personal things. The Macbook runs OS X Yosemite. My personal machines almost invariably run GNU/Linux (I've been especially fond of Slackware lately) or OpenBSD. My primary rig has a 122-key Unicomp Model M keyboard and a Logitech M570 trackball mouse, along with two monitors (one 1680x1050, one 1440x900); my desk at work has a 2560x1440 Thunderbolt display, connected to one USB port of which are a Logitech K570 solar-powered keyboard (Mac model) and a Logitech M570 trackball mouse (I really do love these trackball mice).

My primary editor as of late is Emacs. My workflow revolves heavily around fiplr for fuzzy-searching and Magit for git repo management (on Linux / OpenBSD, at least; on OS X I use GitX).

Git is currently my VCS of choice, though this is more out of necessity (since the vast majority of the projects I work on are hosted on GitHub, be they public or private repos; I use Bitbucket somewhat as well, so I've been looking a little bit into Mercurial lately, but I've yet to really use it for real work).

My dayjob revolves around Ruby on Rails programming. As a result, common Ruby-related tools (in addition to, of course, Ruby itself) - particularly RVM and globally-installed versions of Bundler, gemr, and Rails 4 (mostly for the various generators, though I don't really use those a whole lot) - are installed on most of my machines, including the Macbook. My job is more geared toward system administration and backend programming, so I've yet to explicitly install common frontend-development tools (like Node, bower, grunt, etc.) on very many of my machines, but I do have them installed on the Macbook as a precaution.

When it comes to building personal projects, my go-to languages have been Ruby (without Rails; I'm more a Sinatra/Padrino fan) and Elixir (recently with Sugar, which I find to be much friendlier to use than Phoenix). I maintain some private Erlang and Elixir Slackbuilds to that effect in order to track the latest versions of both on my Slackware machines (the Erlang on Slackbuilds.org tends to be slow to update, and AFAIK there's no Elixir Slackbuild at all yet); I've yet to publish them, but probably will in time. I've previously used a lot of Perl in my projects, but other than CPAN, I rarely use any Perl-specific tooling.

For databases, SQLite and PostgreSQL are my go-tos; I stay clear of NoSQL databases (except perhaps CouchDB or Mnesia), since I don't feel that they offer anything compelling over Postgres for my needs.

When it comes to the minimal frontend work I do, I generally steer clear of Javascript; when I do need to delve into JS, I've found Mootools to be nice for my uses. I've been using Yahoo's "Pure" CSS framework for things like menu bars and grids, and I've been quite happy with it so far.

---

Going into servers, my software stack tends to stick to Slackware or OpenBSD. My mail server runs OpenBSD with OpenSMTPD and a mail pipeline that includes SpamAssassin, spamd, and ClamAV. Meanwhile, for web servers, I generally go with either Nginx or OpenBSD's httpd (depending on whether the server runs Slackware or OpenBSD), along with PostgreSQL and one or more language runtimes (usually Ruby, Elixir, or Perl, inclusively, as described above). I don't really use any sort of config management system (like Chef or Puppet) on my personal servers; I prefer to configure them individually, using Emacs' TRAMP to edit configuration files over SSH.

---

I do some general electronics repair, too, on my free time. I thus carry around a physical toolbox in my truck with at least basic tools and parts (screwdrivers (particularly my really nice ratcheting screwdriver with a bunch of electronics-specific bits), spare USB/ethernet/power/SATA/etc. cables, wire strippers, soldering iron w/ solder, electrical tape, duct tape, crimpers, spare RJ-45 connectors, heatshrink tubing, zip ties for cable management, anti-static strap, multimeter, some spare PCI peripherals (including a spare dial-up modem card; you never know when you need to fix someone's dial-up), extra keyboards and mice, bag of spare jumpers, spare flashlight (in addition to the one in my glovebox), some sticks of DDR and DDR2 RAM, various AV cables, speaker wire, the works). I have a more thorough superset at home, and a thinner subset at work.

Your demos might be good... but I can't see without logging in. One suggestion... if you are trying to showcase your work, don't make people set up an account to try it out. Maybe have a demo site specifically for that purpose that doesn't require login or has a demo account for people to use so they don't have to sign up themselves.

EDIT: BTW, this is exactly how I got my first job... I wrote a demo app and showed it to a potential employer. It was enough to get my foot in the door at a place where I had the privilege of working long hours for low salary until I had enough experience to apply for more desirable positions. Confidence and shoe leather can be as good as an formal education... good luck :)

> "Do these apps that I built 100% myself demonstrate enough skill and understanding in web development to land a entry/mid level job?"

Like others have mentioned, this in particular is hard to evaluate without a. source code, b. demo login. Otherwise, all I can glean from this is that you know how to make landing pages :P

But I wanted to point out some design issues I found in your sites. This may or may not actually affect your candidacy, but I thought you should know about them in general as it might signal a lack of attention to detail:

Basically this would signal to me that you're likely not too design-inclined and I would probably focus more on your backend abilities (if given source code). These would be red flags if you were applying for a position that involved design or UX though.

I think it's definitely enough to get you hired. It's also exactly how I landed my first job. During the interview, the senior developer that did the hiring made a point of mentioning that having a demo project showed what I could do and made me stand out from the other applicants he was looking at. Good luck!

I can't see sh!t. I really, really wanted to read what to do list app is all about but I just can't. Light Blue and White just don't work well together.

As far as landing a job. I see you already got a lead. I feel like dumbass now. These kind of apps I made just for fun with web.py and felt it's way too simple to pitch similar demos for a job. Even entry level ones.....I think I am suffering from imposter syndrome.

Alright guys for any one who made comments about the landing pages I have removed them for demo purposes so you can now see more of the app with out having to be logged in or sign up. You just need to be logged in if you want to post,like,etc. I hope this enhances the demo experiences!