hacker news with inline top comments    .. more ..    19 Jun 2014 Ask
home   ask   best   5 years ago   
Show HN: I learned Rails and Objective-C in a year to build this
13 points by jpn  5 hours ago   5 comments top 5
hansy 4 hours ago 0 replies      
I still affirm that Michael Hartl's "Ruby On Rails Tutorial" (http://www.railstutorial.org/book) is one of the most beautifully simplistic and effective tutorial books ever written. Combine his book with Ryan Bates's Railscasts (http://railscasts.com/) and you can pretty much build anything you can think of. I learned RoR we these resources as well and am just starting to take the plunge into iOS. I haven't looked into NSScreencasts much, but I did obtain a copy of The Big Nerd Ranch Guide to iOS Programming (http://www.amazon.com/iOS-Programming-Ranch-Edition-Guides/d...).

Anyway, congrats on launching both an iOS and web application. Bonjournal looks awesome!

evolve2k 1 hour ago 0 replies      

Bonjournal, a travel journal app- iOS app (https://itunes.apple.com/us/app/bonjournal/id719266933)

- web app (https://bonjourn.al)

2close4comfort 19 minutes ago 0 replies      
That is an amazing site, congratulations.
AndrewTerry 2 hours ago 0 replies      
You say that you took a year to learn RoR and Objective-C for this, but can I ask: were you starting from scratch as a programmer and was this a full-time project (or were you balancing your learning and development alongside having another job)?

Congrats on the launch! Both the app and the website look beautiful.

grimborg 3 hours ago 0 replies      
Ask HN: Tips for a productive partnership
2 points by sarreph  1 hour ago   1 comment top
dennybritz 0 minutes ago 0 replies      
I recommend Slack (https://slack.com/) or Hipchat (https://www.hipchat.com/) for team-based chat. Basecamp is OK for managing tasks. Other alternatives are Trello (https://trello.com/) or Blossom (http://blossom.io).
Ask HN: What can I do to find more leads for freelancing?
14 points by notastartup  13 hours ago   9 comments top 6
swanson 10 hours ago 1 reply      
There are a few weekly emails that provide a steady flow of curated leads:


wikwocket 8 hours ago 0 replies      
Don't advertise; network! The leads you get as referrals from people you've already helped will be higher quality clients, and they will come to you already having respect for what you do, due to the referrer's recommendation.

To this end, ask past clients if they have any colleagues or friends in need of work. Also ask them if they're willing to be featured in a case study/whitepaper/writeup. My best-paying gigs came from friends' referrals.

Also consider starting your own network. Use your knowledge of industry XYZ (gleaned from serving XYZ companies) to put together a 1-2 hour talk on "Bringing XYZ to mobile" or "How to solve XYZ problems on the web." Hold a seminar/webinar/meet & greet session at your local library/hotel/chamber of commerce. Bring coffee and donuts and get it listed in the local paper and village newsletter. People will come (if only for the donuts), see you as the leading local authority on XYZ-meets-technology. At this point, stick around after the session for Q&A and the leads will start coming in. My lawyer friend has a lot of success with this technique.

Rodeoclash 12 hours ago 1 reply      
If you don't mind working with design agencies then send them email to setup a meet and chat about yourself. Don't send a super long email to them, just a short, conversational tone asking to meet for a coffee and a chat about what they do and what you do.
kkoppenhaver 12 hours ago 0 replies      
Just a heads up, the TD Ameritrade link on your site is broken. Have you looked into getting referrals from previous clients? Do they know you're still freelancing/looking for new leads?
Im_Talking 7 hours ago 0 replies      
You should be identifying and marketing to other businesses within the same industries as your previous clients. Most businesses in a particular industry will have pain in the same areas.
bdcravens 12 hours ago 0 replies      
Ask HN: What are you learning right now?
19 points by brickmort  17 hours ago   19 comments top 17
whostolemyhat 47 minutes ago 0 replies      
I'm picking up Node at the moment. Express makes it incredibly easy for me to knock up a REST API.
rubiquity 10 hours ago 0 replies      
I'm spending a lot of my free with Erlang and Elixir, a Ruby-syntax inspired language that runs on the same VM as Erlang. I'm enjoying Elixir a lot and finding it adds some clarity to the little things I'm writing with it.
mswen 14 hours ago 0 replies      
I have been learning about mapping. Using leafletjs to incorporate mapping elements in web applications. Building check-in operations based on current location, placing markers/icons and modifying the icon color to represent data values and making it easy for users to contribute location data that is currently missing from the data set.

I am also exploring options for efficiently storing sparse matrix data, doing automated statistical distance/similarity analysis and storing all-to-all distance measures back into a database.

springogeek 2 hours ago 0 replies      
C# for use with XNA.Working on an indie xbox/Windows game which I hope to port to MonoGame and other platforms.
brickmort 13 hours ago 0 replies      
I'm a Python programmer but I have some familiarity with Java, but I haven't really touched Java in over five years, so I've been refreshing my mind with the recent Java 8 docs and it's been a pretty fun experience so far.
mbrownnyc 6 hours ago 0 replies      
I'm learning how to be better. I started reading Farnam Street about two months ago, and picked up Ryan Holiday's The Obstacle is the Way two weeks ago. Meditations: A New Translation and Thinking Fast and Slow are on their way. I'm facing not a crisis of self, but a realization that I am at a point where in order to move forward, and achieve what I want to achieve, I have some huge ego driven flaws that require a megalithic perspective shift.
partisan 11 hours ago 0 replies      
Grails. I'm a C#/.NET programmer. I've been trying out Scala with Play, and Clojure with Luminus, and RoR before then. Grails is making me the happiest as an open source alternative to C#.
27182818284 13 hours ago 0 replies      
R programming, Android development, and Lisp programming with Norvig's book.

Android development. So far, it is the exact opposite of what fun with computers is.

borplk 12 hours ago 0 replies      
Learning the Ada programming language. I can't believe I had not looked into it all this time. It's awesome.
gaze 8 hours ago 0 replies      
Quantum weak measurement and generating GPU code in haskell
rmaratos 9 hours ago 0 replies      
JQuery! Can't believe how much I do in just a few lines.
jason_slack 10 hours ago 0 replies      
OpenGL and Chinese.
Kakashi 11 hours ago 2 replies      
Japanese. Got the JLPT N3 in two weeks.
tylerpachal 9 hours ago 0 replies      
Machine Learning and Korean!
smoothgrips 13 hours ago 0 replies      
Started a project using AngularJS. I'm finding it quite fun and exciting. I have a decent JQuery background and find myself having to actively refrain from using JQuery. Trying to learning the "Angular way" of doing things.
fatalness 15 hours ago 0 replies      
Linear algebra by the David Poole's book "Linear algebra: A modern introducing" (not even learning seriously, just refreshing 'cause I am CS-graduate)
gabemesq 14 hours ago 0 replies      
Fuck yeah ok? Kiss lobe
When should I disclose my hacking convictions?
5 points by MalcolmDiggs  7 hours ago   7 comments top 4
patio11 6 hours ago 1 reply      
This closes off some avenues to you, but isn't a career killer, particularly if e.g. you work in security. (Of all things.)

I don't know why you'd disclose this without first being asked. If they don't ask, it isn't because they don't want to know, it's simply because it isn't in their decision calculus. I would not inject it into their decision calculus, in the same fashion as I wouldn't say "Don't have great reasons to not hire me? I can think of three!"

Your recent potential employer has a curious understanding f how much VCs notice non-founder employees, to my understanding. Feel free to check that with people who do this for a living, but I'd bet on most VCs being unable to name non-founder non-management employees, to say nothing of running background checks on them.

gayprogrammer 3 hours ago 0 replies      
I agree with patio11's 'decision calculus' point. And I'll add that if you don't plan to repeat your actions at the company, then you don't hurt them by staying silent until they ask--you'll just carry on as a normal employee.

I don't have a felony, but I do have to decide whether (and when) to allow a potential employer to know I'm gay. I know it's not legally the same, but it works the same way in terms of the interviewer's 'decision calculus'. Bringing it up is literally pausing to ask for explicit judgement.

I've always intentionally stayed silent in an interview about being gay, since I always plan to carry on as a 'normal' employee. At work, my intimate life doesn't interfere, just as your history is in your past.

amarcus 6 hours ago 1 reply      
Don't include it in your resume but, volunteer the information during the first interview. Put a positive spin to it - "made mistakes, learned from it and here is how I am now better off".
Treyno 4 hours ago 1 reply      
So, what did you do?
Ask HN: Freelance web developer advice
11 points by shire  21 hours ago   9 comments top 6
zackmorris 11 hours ago 1 reply      
I want to chime in because I did EXACTLY the same thing you did. I took a $10 furniture moving/warehouse job out of college back around 2001 so that I could finance my struggling shareware game business. I worked seasonally, 7-9 hours during the summer and a few 6 hour days a week during the winter, for 3 years.

It was one of the worst decisions I ever made.

I lost the next decade of my life to profound depression after the loss of a close friend, crushing debt, no social life, just really endless problems that were exacerbated by the regressive political climate of the times. I felt a strange duty to give up my dreams and put my nose to the grindstone to make up for the cushy years of the late 90s when the future was so bright you had to wear shades. It put me so far behind that I was just coming out of my funk in 2007 and had no reserves to prepare for the housing bust even when I saw it coming a mile away. I got another dead end computer repair job for 3 more years only to see $1000 per month go toward my credit card debt (which never went down even though I havent used a credit card since 2008) which led to a falling out with my business partner and total implosion of my finances which I wont go into. So in many ways my career didnt begin until around 2011 or so when I started over.

But, in the 3 years since, I worked very hard every day to make it as a freelancer and it seems the effort is beginning to pay off. I started small on freelancer.com, getting $100 jobs that I completed every 1-3 days and began to see that it was a possible replacement for a regular job. I supplemented my income by flipping old Macs on ebay and craigslist. Then I moved up to elance and odesk and began taking jobs in the $1000-1500 range. Ive worked with a couple of clients in the $5000 range and had a 6 month contract at my hourly contracting rate which allowed me to save enough to live up to a year afterward with no outside income. Ive started getting so many leads filling my inbox that I cant answer them all. The catch is that this is mostly for iOS work, which can be extremely taxing/tedious if you bump up against limitations in the APIs (which seems to happen often in the projects I take on because I like the fringe stuff). So there is definitely work available, but be prepared to put in a lot of hours both on and away from the computer.

The biggest challenges I face now are lean weeks between gigs and just general anxiety from everything resting on my shoulders. Ive found that the right client there makes all the difference. If you remember the old adage good, fast, cheap - pick any two then the default mode tends to be good and cheap if you are a perfectionist. So clients that are well educated and/or patient tend to be more copacetic than clients that are merely wealthy or business-oriented. YMMV though because I tend to be a lazy programmer who likes to write the best solution once (as opposed to iterating) so I do the majority of my problem solving in the background of my subconscious. In my younger days, I was kind of the opposite, and would have made a better rockstar hacker in a startup doing good/fast work had there been more opportunities after the dot bomb.

I feel like Ive been a bit of a broken record about this stuff but its because I wish there was a road map available for new developers so they could avoid the same mistakes I made. For example, always charge at least your overtime rate which in your case would be $18 per hour. So that means if you bid for a flat rate job, draw up your hours estimate, multiply it by 3, and multiply that by $18. So say you think something will take 2 weeks or 80 hours, you would bid at least $4320 for it. On paper it looks like youre charging $54 per hour, but in reality it could be 2 months before you get another gig, allowing for downtime. After you do a couple of jobs like that and track your time, you can begin to refine your estimates and get closer to actually making $50 per hour, and then gradually raise it to $75 or $100 or whatever you feel comfortable with. That mostly depends on how much in demand you are, so in the beginning its more important to land a couple of gigs than charge top dollar IMHO.

As for where to get gigs, Ive done a couple for friends in the $1000-1500 range, and if you want to do web development, just look at prominent businesses in your area that have a lousy web presence. I tried cold calling and hitting the pavement once but only had a list of 50 businesses and didnt get any hits. You should probably aim for at least 100 businesses if you go that route since its maybe a 2% conversion rate. A better way is probably to start with immediate family, talk to their friends in various businesses and narrow it down to 2 or 3 and meet them casually over coffee or dinner and make your pitch like its old hat. Then your conversion rate might be 50% because you can get right to their sore points and once they are interested in what you can do, charge maybe 50-100% of the going rate in your area, depending on your experience level. The hardest part about that is being on call afterward as the friendly neighborhood computer guy, so have some sort of plan in place for incidents and charge accordingly, say $75 per hour with a 2 hour minimum so they only call you when they really need you.

I just want to close by saying that this is probably a means to an end. My goal now is to be part of at least a 5 member team of consultants (what contractors used to be called in the 90s) and charge hourly business rates, which probably are in the $100-250 range, even in rural America. Either that or save up enough money so that I can bootstrap my own apps. A possible route there is selling ownership in your business, say 10, 20% for X many tens of thousands of dollars but I dont know enough about how the new micro investing laws work so I will probably have to think of something clever enough for kickstarter. Im hesitant to go that route again though because I failed so painfully in the past and am really looking for a sustainable business model. This last part seems to be one of the great pains of our time, so Im optimistic that somebody might provide a turnkey solution, but Ive been waiting 15 years for it. Grouptalent, gun.io, freelanceinbox and others of that sort seem promising so you might have luck there. If you want to get started right away, I recommend odesk and have heard good things about guru as well. You can definitely do it, so dont settle for labor because most of the safety nets have unravelled and they prey on people with no leverage. You know how they say not to be the smartest person in the room, or the best player in the band? Well dont be the only guy in the warehouse without an addiction, criminal record or kids on child support. The ridicule I endured at that job was at least as damaging to my psyche as the low pay and backbreaking workload. Get out as soon as you can.

sj4nz 20 hours ago 0 replies      
There's a lot of ground to cover to become a non-starving freelancer. You need to find mentors and other working models quickly and some grit. You may need more education and training. Since you're looking at web-work, you need also to start building your own portfolio of sample-work in order to prove yourself, I recommend learning everything you can about github.com and making yourself a name there with a github page--version control systems like GIT will become your ultimate UNDO/REDO system and will save you hours of agony when you make mistakes. Make mistakes. You can't learn anything without learning how to recognize you've made a mistake. But networking on github is just networking on the Internet, you'll also need to find communities of people to associate with in real-life to network. You're young, there are a lot of other people out there to discover how things worked best for them--their experiences can help you guide your own.

Here's some more rabbit-holes to fall into, you'll come out of them fine:

http://thefoundation.com/ Entreprenuership)http://5by5.tv/quit (Grit, psychology of going-it-alone, passion)http://www.danpink.com/books/free-agent-nation/ (Work ethic and networking)http://www.personalkanban.com/pk/ (Self management)http://www.lifehack.org/articles/lifehack/a-review-of-the-ar... (Learning)

And finally, if you have any debt, by hook or crook find ways to eliminate it. Stay off the debt path, it will only cause you suffering after short-term gain.

wikwocket 14 hours ago 0 replies      
> What is the pay I can expect as a freelancer?

This depends on where you are, and how well you can communicate the value of what you deliver. Commodity hourly freelancing might be $10-40 an hour. Business-savvy consulting might be $60-80 an hour. High-end consultants will pitch and deliver projects in the $X0,000 range, which when divided by time spent can easily equal $X00 an hour.

Note that all of these people may be doing functionally the same thing: defining projects with customers, building websites/apps, and delivering them.

> What language will land me projects and clients soon?

Programming languages will not land you projects or clients. Nobody hires a photographer because of the brand of camera they use. Nobody goes to a restaurant based on where they buy their groceries. Anyone with purchasing power will generally just want something that meets their need, or removes their pain point/bottleneck/problem.

Your goal is to communicate that you can do this, in words and in actions. Not to communicate that you use HTML9 Responsive Boilerstrap JS. [0]

> Where do I begin my career as a freelancer?

yen223's advice is good. Build a website or simple app that you like, that could solve a realistic business need. Feature it as a demo or just keep it in your back pocket as proof you can solve problems. Then the hard part: convince someone that you are able to solve problem X for $Y dollars. Start small, within your network: maybe your brother-in-law is a caterer without a website. Maybe your aunt is a real estate agent always complaining about keeping in touch with her leads. Maybe your dentist keeps all their files on paper instead of in a computer. Discuss problems with people, brainstorm solutions, communicate that you can solve their problems with technology, put together a proposal, and deliver.

After a few gigs, if it's working out for you, formalize the whole process. Look into contracts, incorporation and proper accounting, etc. There's a million Ask HN's about these topics.

> By the way I'm familiar with some languages and frameworks but not an expert or anything.

If you can make a website that says "Hello world, welcome to our site, here is a brochure of information on our products," then you are basically a wizard in the eyes of many many people. 80% of the world's professionals would say, "I'm not an expert at this, I can just get things done." My plumber is probably not an expert on bleeding-edge state-of-the-art industrial water treatment. But he makes the faucets run and the toilets flush, and I am happy to exchange money for this service.

[0]: http://html9responsiveboilerstrapjs.com/

yen223 18 hours ago 0 replies      
As a guy who's making the transition between newbie freelancer and professional go-to guy, here are some things that worked for me:

1. Prove to yourself that you can deliver by building at least one site that you're happy with.

2. Go for the most popular language that you know. PHP, Python, Ruby, and Java are good starting points.

3. No one's going to come to your house to offer you a job. Go out there and market yourself. Every month there's a freelancer thread on Hacker News. Post there.

4. How much you should be getting depends heavily on your level of skill, and your location. But it's definitely going to be more than $12/hr, easily. I highly recommend charging per project, instead of per hour.

eabraham 15 hours ago 1 reply      
Motivation is the key factor in becoming a successful freelancer. I freelanced for about 2 years and in that time I learned 2 new languages and countless libraries. My average week would be about 50 hours of which I was billing between 30-35 hours at $100-150/hour (NYC area). The other 15-20 hours was finding clients, writing proposals, dealing with self-employment business issues (taxes, accounting, invoicing). Its definitely not the easiest life but the pay was good and the problems were more interesting than corporate development. Looking back on freelancing I appreciate the many skills I gained (both technical and soft-skills).


1. Pick a programming language and complete a comprehensive tutorial. Then start to find clients at $15/hr rate (check elance.com and odesk.com). Your goal should be to fill up 35 hours of your weeks with billable time. Once your weeks are full and your skills increase, creep up your rate by $5/hour until its difficult to keep your week full.

2. Look into local entrepreneurship/business Meetups as a good source of clients and avoid equity-only business people who don't value your time.

shire 14 hours ago 0 replies      
Thanks a lot everyone for your help. I'm going to go with PHP to start of my freelancing business is that a good choice?
Ask HN: What does modern front-end web development look like?
6 points by Fr0styMatt  20 hours ago   6 comments top 3
brianchu 6 hours ago 0 replies      
A modern front-end stack looks like:

For structure/content: raw HTML, or less commonly a language that compiles to HTML (Haml, Jade, etc.).

If the HTML is being rendered and served from the backend, you might use a templating language like Django's templating or Jinja (Haml and Jade also have these features).

If you are creating an application that does a lot of AJAX, you will also often use a JavaScript templating system like Handlebars.

For styling: raw CSS, or fairly commonly a CSS pre-processor like SASS, Less, or Stylus. Very often you will use a CSS framework like Bootstrap or Foundation to give you pre-made forms, buttons, grids, and other essentials.

For logic/interaction: JavaScript. Many people will also use compile-to-JS languages like CoffeeScript, TypeScript, or ClojureScript (in decreasing order of frequency). There are a lot of libraries/frameworks that can be used here. Most commonly you'll use jQuery and jQuery UI widgets. For more complex applications, single page app frameworks like Backbone, Angular, or React come into play.

Build process: For more complex projects, build tools like Grunt or Gulp to watch for changes to the filesystem and re-compile files (typically when you're using CoffeeScript or a CSS preprocessor), to package everything for deployment (minifying JavaScript, etc), and to run tests.

Packaging: Often you'll use a tool to keep track of modules/packages. These tools are quite different. Bower, RequireJS, Browserify, Component, and other tools occupy this space.

Often you'll use Node's npm to keep track of build process and testing packages!

Testing: For testing you'll often see frameworks like Jasmine or Mocha/Chai for unit tests/integration tests. For end-to-end tests you might see things like Selenium (run tests in a browser window). There are also test-runner frameworks like Karma.

Debugging: Chrome's developer tools (or Firebug/Firefox/Safari).

For someone starting out this is probably overwhelming. The important things to realize are that:

1) No one uses all these tools

2) Most of these tools are only useful for large complex codebases with large teams.

2) The most common stack is raw HTML, raw CSS, raw JS, jQuery, jQuery UI, Bootstrap, no build process, no packaging, no testing.

bdicasa 20 hours ago 0 replies      
Not many developers that I know of use WYSIWYG editors. Most is done by hand, at least in my world of web development. Haven't taken the courses by Treehouse but I've heard good things. I'd recommend looking into a good JavaScript framework like Facebook's React, Google's AngularJS or Backbone.

If you really like strongly typed languages, and want to try out a new platform, check out Google Dart.

sejje 18 hours ago 3 replies      
No WYSIWYG. Virtually all raw HTML.

Treehouse was decent when it launched, and I imagine it's improved a solid amount by now.

If you're coming from a development background, you'll do fine.

If you're building true front-end apps, you're going to want to look at Angular or Node.

If the back-end does the heavy lifting, they become less important.

Your FBLogin sucks and you don't know it
4 points by hamzaouazzanic  16 hours ago   1 comment top
hamzaouazzanic 15 hours ago 0 replies      
I have been asked many questions and here are more details1- FB Api did not return anything when I asked for the email2- I am not sure but I think that during the verification process of your account, Facebook automatically change your primary email address. All the users that had a phone number instead of their email had their old college email address that did not work anymore and Facebook deleted it from their account3- A way to monitor the number of errors is to log all the FB Login error in your code or with Mix Panel
Ask HN: SEO beginners (similar to Hartl for Rails) guide for engineers?
5 points by pzaich  19 hours ago   2 comments top 2
taprun 16 hours ago 0 replies      
I made a list of some useful free tools: http://taprun.com/guides/seo/
Ask HN: Help me make a new bittorent client.
4 points by prodigen  17 hours ago   1 comment top
J_Darnley 13 hours ago 0 replies      
I would probably suggest extending one that already exists. If you extend one by adding the features you want, great, perhaps others want those same features too. They might be willing to help in some degree (coding, testing, documenting).

Starting from scratch, or from an existing library, without lots of dedicated effort and some thought about maintaining it, it will decay into yet another "half finished" project.

Ask HN: How did you get your app featured by Apple?
16 points by thisjustinm  1 day ago   1 comment top
joshdance 21 hours ago 0 replies      
At a previous company we got featured by Apple as one of the 'Made for iOS 7' apps. We had been in contact with them previously. I think we met a few people at WWDC or they reached out to us, I can't remember. But basically they asked us to submit some artwork, and then one day we appeared on the list.

Most of the time, to get featured, you need to be doing something a little unique. We were one of the only healthcare apps using the new features of iOS 7. After that they ask for artwork and then you wait and pray. :)

Show HN: Area301.com Intelligent Leads Aggregator for Web Developers
3 points by kull  20 hours ago   4 comments top 3
kull 20 hours ago 0 replies      
About the project (From the Author)



I am a web developer finding new clients on job listing websites (CL, Elance, Guru, Smashing Magazine just to name a few) and I find it time consuming to go from one site to another looking for leads. Most of those sites do not have good search functionality, and reading new postings via RSS does not fix the situation.

There are also many spammy posts on all of those sites and over the years I learned how to easily spot time wasters and fake postings.



I decided to create a site which will:

get data from job listing websites ==> analyze this data and try to eliminate suspicious posts, detect quality of leads etc. ==> store this filtered data in a database ==> display it in a user friendly format

I created this tool and called it AREA301 and I use it myself when searching for new web design clients. I have opened it up to the public and let other web developers use it. It is free to use.

I already have more than 100 active users and I address any issues they find as fast as I can.

I am looking for feedback about the idea, landing page design and the functionality of the tool itself.

sejje 18 hours ago 1 reply      
You're going to get a cease and desist from Craigslist, eventually.

They do not take kindly to scraping.

screengel 20 hours ago 0 replies      
Very nice tool indeed, but I would need some more time for testing it to tell you my opinion.
Ask HN: Can we get colapsing comments?
2 points by cfontes  6 hours ago   2 comments top 2
dang 5 hours ago 0 replies      

But please don't post questions like this here. As the guidelines ask, send them to hn@ycombinator.com instead.

adamnemecek 5 hours ago 0 replies      
Ask HN: Getting involved in scientific research computing
4 points by Delmania  20 hours ago   2 comments top 2
caw 18 hours ago 0 replies      
I used to sysadmin for a place doing high performance computing. They were working on a different problem domain than neurology, but still required loads of computational power.

The tech they used:

* GPGPU programming (CUDA, etc)

* Fortran (old code base dated back to the 80s)

* C/C++

* Matlab

* MPI & OpenMP

There was a little bit python but mostly from the newer grad students.

Scientific Linux (https://www.scientificlinux.org/) provides a pretty good base OS though not everyone uses it. Some places use RHEL or CentOS instead. For the GPGPU things the developers used Ubuntu because at the time it was the easiest way to get CUDA running. I have no idea if that's changed.

chris_va 17 hours ago 0 replies      
I've gone down this path. If you are a decent engineer, go speak with academics at your local university. I spent a lot of time with the bio/comp-bio folks, and they can always use collaborators.
Ask HN: State of the art mobile messenger (end to end encryption)
7 points by patrickg  1 day ago   2 comments top
atmosx 1 day ago 1 reply      
@tptacek (matassano) seems to like very much these guys[1].

[1] https://whispersystems.org/

Ask HN: Startup School Livestream
2 points by wj  16 hours ago   1 comment top
ASquare 16 hours ago 0 replies      
its working now
Ask HN: Which of these ideas is more likely to get funded?
2 points by Envec83  18 hours ago   12 comments top 5
canterburry 11 hours ago 1 reply      
I find this question somewhat amusing.

You treat the most important aspect to your entire success (traction) as a given and skip straight to questions of funding.

What you should be asking is: which of these ideas will get the most traction?

If you have massive traction, VCs will fund you. Period. So, don't worry too much about funding but focus on traction.

I think you need to get your priorities in order.

lsh123 16 hours ago 1 reply      
Any of the ideas can be funded and you need to figure out what would make it stand out from the crowd and what value your product would bring to your users (you know the story how Google was funded - the VCs simply liked the product).

1. Tons of competitors. I read a report somewhere that people use a weight-loss app for less than 2 weeks on average and then switch to another (I guess they don't like results). Thus, you will need to figure out retention problem (e.g. many such apps now include a hardware component).

2. There are tons of "deals" website (in the US) and many have forum format, up/down voting, etc. Key problem to address is how to get enough people to use the product and how to build critical mass.

3. The online sellers marketing automation exploits the fact that you can click on the link and buy the product. With offline stores you need to either force people to go to the store right now (hard) or to remember this marketing email long enough (days if not weeks) until they get into the store (also hard). Can you use location for that? Bluetooth? WiFi? Or is there something else that can help you to get people to buy things after they read your emails?

dennybritz 5 hours ago 1 reply      
As was already mentioned above, whatever gets traction gets funded. VCs are just as clueless (maybe even more so) as entrepreneurs about which ideas are "good" or "bad". They fund ideas with traction and good teams with the hope of hitting a big home run with one of them.
sogen 16 hours ago 1 reply      
my vote for No 2

and also no. 3, the offline market is huge and mostly unattended.

Will you still look for going out of brasil if it doesn't get funded?my advice: Don't look for funding, bootstrap it.

i.e.: http://37signals.com/bootstrapped

ExpiredLink 18 hours ago 0 replies      
No 2
Quickbooks charges more if you are a Mac user
8 points by ub  1 day ago   7 comments top 6
Spoom 1 day ago 0 replies      
FWIW on Linux (Google Chrome stable) I get the $12.95 / $26.95 / $39.95 pricing.

But then if I open it in Incognito mode, I get the cheaper pricing. I'm thinking either they recently updated their pricing and the cache is clearing out, or they're doing multi-armed bandit price testing.

sdfjkl 1 day ago 1 reply      
6.95 on Firefox Mac, 12.95 on Safari

Might just be A/B testing.

larrykubin 1 day ago 0 replies      
There was a story on Mac users being shown pricier hotels on Orbitz a while back:


nanijoe 1 day ago 0 replies      
On my Mac using Google Chrome , I get : Quickbooks Simple Start: $12.95 Quickbooks Online Essentials: $26.95 Quickbooks Online Plus:$39.95

Using Safari , I get : Quickbooks Simple Start : $6.95 Quickbooks Online Essentials : $9.95 Quickbooks Online Plus: $13.95

alexgaribay 1 day ago 0 replies      
Interesting. I'm on my mac and I see prices different from these.

Simple Start: 9.95Essentials: 14.95Plus: 24.95

Now when I view it from a windows laptop, the prices match what you have listed when viewing from your mac.

mcintyre1994 1 day ago 0 replies      
Interesting, price difference seems crazy for A/B. Chrome on Android (Nexus 7) gets the Mac pricing you listed.
Ask HN: How to get a job at Silicon Valley Startup in Six months?
2 points by kp25  19 hours ago   2 comments top 2
patio11 19 hours ago 0 replies      
Hackathons/Coding Competitions are not the best way to "get noticed." The best way is to actually make something meaningful and then get that in front of someone with hiring authority. You will have to work for that second part of the equation -- it doesn't happen automatically. Six months is certainly enough time to do it but every day you should expect to build stuff and show it to people.

Startups (typically) won't be super-receptive to providing relocation assistance packages or dealing with getting you a work-capable visa in the US. The larger tech companies have more experience with these. (Incidentally, many of them have Indian branches and it may be easier to an internal lateral transfer than being hired from where you are.)

Incidentally: there exist at least a few Indian product companies which would actually be good to work for, like Visual Website Optimizer.

tjr 19 hours ago 0 replies      
This story was just posted on HN yesterday:


It's not your exact same scenario, but you might get some useful ideas from it.

New EBS (AWS) volume type: General Purpose (SSD)
8 points by jacobscott  2 days ago   7 comments top 4
renaudg 1 day ago 0 replies      
Is it supposed to be all smooth sailing launching gp2 instances from standard snapshots and vice versa ?

It may be just me but I've had really weird and serious new errors today in us-east-1 launching new instances, or even starting previously stopped ones with no changes to the instance whatsoever ! General slowness, "reachability" health check failing, with the system log showing that the kernel couldn't be uncompressed, maybe because the bootloader couldn't find the root device in the first place ? I'm not using custom kernels at all.

The timing is too strange for it to be a coincidence, but nothing on the AWS status page.

nnx 2 days ago 0 replies      
exidy 2 days ago 2 replies      
Interesting. I can create a gp2 volume through the console, but not through CloudFormation.

  UPDATE_FAILED - gp2 is invalid. Valid volume types are standard and io1.

albanr 1 day ago 0 replies      
It'll be interesting to see how much CloudCorset will be able to impact/improve performance by reducing the number of IOPS that goes to the EBS storage backend. http://www.cloudcorset.com/?ref=Tie98
2 points by ericthegoodking  23 hours ago   discuss
Ask HN: Why don't hotels let you pick your room?
8 points by asbestoshft  2 days ago   15 comments top 6
ebeliah171 1 day ago 1 reply      
Assuming everyone here is very aware of Hipmunk (YC S10), but right around the same time that Hipmunk launched with flights there was a hotel startup called Room 77, founded by some travel bigwigs including Brad Gerstner, that unveiled at Launch Festival (https://www.youtube.com/watch?v=DH2b7IUx_14). Room 77 was trying to tackle this exact problem (http://www.tnooz.com/article/room77-has-a-view-to-shake-up-o...).

However, Room 77 just recently announced a licensing deal with Google that indicates somewhat of a pivot to mobile with a portion of their team joining Google (http://skift.com/2014/04/07/room-77-taps-google-for-an-exit-...).

As a lifelong student of hospitality, former hotelier, and now cofounder in a hotel startup, it's highly unlikely that we'll ever see hotels letting travelers pick their own rooms. This would be a logistical nightmare with preparing rooms, early checkins, late checkouts, stayovers, etc. In Vegas forget about it; there are days when a hotel will turn over 1000+ rooms and it would be impossible to do so in an orderly manner. First to checkout are the first cleaned and the first available to whomever is at the front desk. Plain and simple.

Inventory in other hotels can get tricky with numerous bed types, room types, room view upgrades, etc. It sounds like a great idea for travelers, but a nightmare for hotels who would have to deal with irate guests if they didn't get their desired room.

Commodification is a thing right now with hotels (think of all those upsells on planes like extra leg room; a company called Nor1 - http://www.nor1.com/ - is working on streamlining hotel related upgrades) and the 24 hour stay (not so much technology behind this one, it's built into their property management systems). So if you check in at 6pm the first day you have to be out by 6pm the next day (or whatever time you checked in). If the 24 hour thing works, pre-checkin room selection might stand a chance and get built in to as a part of the upgrade process (I'd imagine it'd encourage you pick a better view or room type and for a fee).

csbrooks 2 days ago 1 reply      
What happens to the person staying in that room who decides at the last minute to stay an extra day?
User9812 2 days ago 1 reply      
That seems like a good idea, and I could see hotel visitors wanting to select a room overlooking the parking lot (to watch a vehicle), or wanting to be on a particular side of the building (avoiding highway noise), etc. People have all sorts of little preferences, so I think that feature would get a lot of use. They also like being familiar with a room, so I could see them booking the identical one on their next trip.

Since we're talking about hotels, I think the business in general has a lot of faults. I get more perks at a $10 per night hostel or $50/night Airbnb apartment, than I do at a $300 per night hotel.

When you book a hotel for $300 per night, they nickel and dime you for everything. Wifi? You'll need to register for it at the front desk, and pay $20 per day. Oh, want a bottle of water, or small snack, that's another $10. That hostel, or cheap-o hotel will give you free wifi. I'd say half of the Airbnb places I've stayed at left beer or a bottle of wine in the fridge, and a few places had a giant fresh platter of fruit on the kitchen table.

Why doesn't this happen with a $300 per night hotel? To me, this is a complete turn off. I'll avoid the fancy hotels, because I don't know where it'll end. They're trying to gouge me at every single corner when I've paid a premium, and instead of being an appreciated customer, I feel like I'm being taken advantage of. My parents are well off, and I know they feel the same way. When they go on vacation and stay at a high end hotel, they have to tip people left and right. They're forced to use the staff at the entrance for carrying their bags up to the room, and then they need their wallet ready to tip them for that 2 minutes of work. What kind of awful first impression is that? You're on vacation, paid a small fortune for a room, and within minutes you need to shell out more cash.

Yes, I know their thought process is they can squeeze absurd prices out of people that have money, but I think it's completely backwards and destroys their image and sense of luxury.

I think there's a business for a mid-range hotel with perks. Take a mid-range hotel with $150 per night rooms. Add $15 of free perks, and charge $165 per night for your rooms. With that $15, you could give every visitor free wifi, 2 bottles of water, a couple of bananas/oranges, bag of chips, couple of health bars, bottle of juice, 2 beers or a bottle of wine, and small bag of nuts. To me, that's a huge difference in service and experience for a small price. It would make me book that place every night of the week, and I'd recommend it to others. I'd put employees or clients up in such a place, knowing they're feeling pampered. Why doesn't this exist? Would this not be appealing to anyone else?

jakejake 2 days ago 0 replies      
Great question. Some BnB hotels and condo rentals do have reservation systems that let you choose the specific room. They tend to be places where each room is unique or separately owned, though.

As for why you can't pick your room in a typical hotel, I'm not in the business but I can imagine the reasons are mostly advantageous only to the hotel. Not really for malicious reasons, but just designed to maximize occupancy. I kinda imagine a Tetris type of board where, if the hotel management is allowed to control it, will be packed with no void spaces - always as close to full capacity as possible. In fact, it will be overbooked with the expectation of cancellations. If they let the visitors control it (i.e. choose your own room) then the schedule will have a lot of void spaces (unbooked days) with the best rooms taken and the less desirable ones unbooked.

There are times when I would pay a premium with no-refund allowed if I could lock in a specific room, though. I'm sure others would as well. There's probably an opportunity for a hotel to do this.

brudgers 2 days ago 1 reply      
Because, at least in the US, hotels have liberal cancelation policies. In addition, the hotel never really knows what kind of work will be required after a guest leaves...or exactly what time a guest will leave, so the order in which rooms are turned around is not known beforehand. And letting people into their rooms at check-in time or even before is a bigger deal for travellers.

In addition, there are frequent customers who may need a last minute room and companies (such as an airline when a flight is cancelled or overbooked or delayed) that may need a block of rooms on short notice.

An airplane on the other hand is a public space, and the individual has much more limited control over much less space...trash an airline seat and you're probably going to jail.

asbestoshft 2 days ago 0 replies      
It would actually seem like a win for everyone as hotels could charge more for rooms that are better just like airlines do for premium seating. That room away from the elevator that is another $25/night. They already do things like that, the ocean view costs more for example.
Ask HN: Had an increase of 60k likes on my fan page and most of them are fake
5 points by amarcus  2 days ago   1 comment top
GrepVyne 2 days ago 0 replies      
They belong to a swarm of accounts that sell likes. So they are liking your page to make the likes that they were purchased for look more legitimate.
Ask HN: How to find a marketing co-founder?
13 points by mark_sz  4 days ago   19 comments top 10
PeterWhittaker 3 days ago 1 reply      
Talk to your developers, friends, etc. Tell them briefly what you are doing, and what sort of help you think you need. Keep it general - you're working on the technology side, you think you'd benefit from a trusted associate on the business side. But try to lean people's thinking away from MBAs - and away from sales or marketing communication - and more to market analysis.

Do you or your developer friends know people who have built businesses before? Talk to them.

No matter who you talk to, get used to saying something like "I really appreciate your time, who else do you think I should talk to? Do you have their number? Can I use your name?"

Also try to talk to the people who might use your service. Give them a brief overview of the problem you are trying to solve, let them tell you how it might or does not fit in to their world. Listen, and listen between the lines. Then do it again. If they seem interested, ask them how much such a service would save them in time, effort, or other forms of money.

Do NOT change your service based on one or even ten conversations, not until you understand the story between the lines. At least not right away.

If you need a sounding board, rather than a marketing associate, ask some of your trusted friends, technical and non-technical, if you can buy them drinks or dinner a couple of times a month and share what you've learned.

Practice duck testing (cf recent HN articles): You should be able to explain the idea and what you've heard from others to a rubber duck.

jamilv 1 day ago 0 replies      
Linkedin, go to local startup meetups or look on meetup for marketing groups that do meetups (there are TONS!).

If you have the connections ask your friends/colleagues/acquaintances for a referral to a marketer they know.

I'm a marketer and I focus on these channels heavily.

If you are able to manage well and are up for the challenge of negotiating, try one of the online co-founder matching sites. They match people from all over but the main issue is always finding someone that shares your passion and will work hard to make the startup live.

amac 19 hours ago 0 replies      
Frequent marketing communities like moz.org, inbound.org, warriorforum etc and find a talented marketer. Reaching out is often a difficult but necessary thing to do.
asfa124sfaf 2 days ago 0 replies      
1. It's great that you are asking this question. Marketing is an essential part of any start up -- both from creating the product that the market wants and also in promoting it.As a marketer, it's not something I see enough of.

2. Try LinkedIn, startup networking events, social media (Twitter is great to see who is in your area), blogs, etc. You can ask for recommendations as well. Once you have money, start looking at public relations and marketing firms because they often know the industry better, dealing with multiple clients and a staff full of marketers.

bennesvig 3 days ago 0 replies      
I'm a marketer who is interested in learning about your SEO tool. At the very least I can give you feedback and ideas from a marketing perspective.
me_bx 3 days ago 0 replies      
To whom is your product addressed? Might be good to find a co-founder connected to the market you're targetting. As a co-founder, even technical, you need to understand your users and you'll have to sell your product, so networking in your target segment is something you have to do. Double benefit if you find your marketing co founder while doing customer development.

Edit: grammar

amorphid 3 days ago 1 reply      
What do you want your marketing cofounder to do?
mc_hammer 3 days ago 0 replies      
well, one way would be to pick someone from the many blogs that end up here. choose someone that has successful projects in their past, and did their own marketing. choose someone that has projects that you like, and you are happy with their writing style and the way the present the project and themselves.
webstartupper 3 days ago 1 reply      
Could you give us some more information on your saas project? That might help figure out where to look.
musgrove 3 days ago 1 reply      
It depends. What kind of marketing help do you need for your project at this point?
Ask HN: What are your best tips for deciphering code in an inherited project?
5 points by tomswartz07  2 days ago   5 comments top 4
taprun 2 days ago 1 reply      
I once inherited a big desktop app. It was a mess (everything was in one package, all methods and data were public, it didn't compile and there was no versioning history).

I started by breaking down the code into a few major sections and isolating them into their own modules. This helped me focus on one section of the code at a time without having to understand the whole thing. Then I made as much of the code as possible private. As long as the interfaces were clean, I could fix up the internals at my leisure - or hand them out for others to fix. Then I tried to get it to compile. Then whenever I ran into a runtime problem, I was cleanup that section of code while I fixed the bug.

tl;dr - Divide and conquer. Julius Caesar for the win!

twunde 1 day ago 0 replies      
I've worked on a number of inherited projects of varying quality. The biggest trick is to figure out what is working and what is broken, what's minor vs major. In that regard, you should try and get someone who uses or used to use the application to walk you through it. Then like taproot focus on the important parts or the small-hanging fruit.

Also if the project is small enough, it's often very informative to manually trace out the main code flows.

Also if you're having trouble understanding the programmer's style it's often useful to understand their background. Often the style or technique they use is because they have a background in a different language/library that uses it. EDITED: Personally I would avoid changing the style, because it's quite easy to make a typo or mistake that's hard to catch because you don't understand the application.

seven 1 day ago 0 replies      
I find it very useful to have an environment/toolchain that allows for quick validation of assumptions. Just something where I can quickly drop some code to see if it does what I think it does. If I get more comfortable, I start to write tests. For some stuff it helps me to put the hight level concept on paper in a flowchart or diagram.

Run some code formatter over the source if you get angry about indentation or other stuff that works you up.

Don't underestimate the human behind the old code. It might look wild to you, but the other coder had probably something in mind. :)

EDIT: about the fighting: Make peace with the code. You can't time travel away the problems. For me, I need to constantly adjust my mental attitude towards unfamiliar code. Sometimes that even helps a bit.

greenyoda 2 days ago 0 replies      
One book that might give you some useful advice is "Working Effectively with Legacy Code" by Michael Feathers:


Ask HN: When and why did AWS decrease Spot limit from 100 to 5 per region?
3 points by nnx  2 days ago   1 comment top
toomuchtodo 2 days ago 0 replies      
"If you need more instances, complete the Amazon EC2 instance request form with your use case and your instance increase will be considered. Limit increases are tied to the region they were requested for."

You could always ask @jeffbarr on twitter as well.

Mixely An offline social network
8 points by okcoker  1 day ago   5 comments top 5
dang 1 day ago 0 replies      
Posts without URLs get penalized. You'd be better off posting a story with the url, then adding your text as a comment to the thread.

However, people here are more likely to respond favorably if there's something they can try now (without requesting an invite) or at least some in-depth detail about it.

josephschmoe 13 hours ago 0 replies      
This is a brilliant idea - I just have this feeling something terrible is going to happen as a result of the scaling process. Something about posting event details to a public place...
phantom_oracle 12 hours ago 0 replies      
This reads like a hybrid of meetup.com...

The description of "An offline social network" will make some folks think of something else entirely.

Maybe another description without the word "social" or "offline" might work.

marioluigi 1 day ago 0 replies      
The website does not give any details on how this works. Neither does the About page.
Ask HN: Best way to know your ISP is throttling you?
12 points by geekam  5 days ago   7 comments top 3
zoowar 5 days ago 2 replies      
Have you tried any of the speed test sites, for example http://www.speakeasy.net/speedtest/. The conspiracy theorist in me thinks ISPs know all the speed test sites and will not throttle speed test packets.
seanp2k2 4 days ago 1 reply      
pchar gives really detailed statistics about each hop. I'd recommend running it ~every hour for a few weeks to spot patterns in what is happening: http://www.kitchenlab.org/www/bmah/Software/pchar/

Robtex.com can also be good for examining how autonomous systems interconnect.

jcr 5 days ago 1 reply      
The "easiest" solution requires some learning. The netstat(1) command onunix-based systems (including MacOS 10+) and possibly also ms-windowscan report the number of BYTES passing through a network interface. Onmost implementations the '-b' switch is used to show BYTES and the '-Iifacename' switch is used to define what interface you want to monitor.Since this only gives you one count of the bytes, you also want to usethe "wait" switch, typically '-w #" so the command continuously runsevery "#" seconds.

  $ netstat -bI tun0 -w 8
The reason to use a wait time of 8 seconds is the values you'll see willbe roughly equivalent to BITS per second for the given 8 secondperiod (1 byte is 8 bits). Since most networking throughput is measuredin bits per second, this makes your life easy. Also, using a wait timeof 8 seconds avoids putting mostly pointless load on your system whilegiving you a fairly solid average throughput value.

This method is very flexible. For example, if you're running one or moreVPN tunnels, you can monitor each tunnel individually, as well as theunderlying uplink connection. You just need to use the same command withdifferent '-I' interface names.

Additionally, unlike the inaccurate download speed values presented byweb browsers and similar applications, this is measuring the raw datapassing through the interface (i.e. with packet overhead), rather thanmeasuring how fast a file is being transfered (without packet overhead).

I just leave it running in a tmux window on my firewall so with just aglance I can always see what the connection is doing.

Netflix Public API Program Closing November 14, 2014
8 points by jdlugo  5 days ago   3 comments top 3
cnanney 5 days ago 0 replies      
I was disappointed to get that email, I have an API key and am using it for an ongoing side project of mine.

It seems counter to everything else Netflix engineering promotes with its tech blog and open source contributions. To be so public and open on one hand, and then shut down the public API on the other seems strange.

themartorana 4 days ago 0 replies      
I hope this doesn't mean the end of Netflix availability reporting on moreflicks.com...
jdlugo 5 days ago 0 replies      
Yes, I agree. Frustrating to see the API go away, yet Netflix has a lot of interesting open-source contributions.
Ask HN: What's with all the new languages?
54 points by enen  3 days ago   65 comments top 30
StefanKarpinski 3 days ago 1 reply      
Part of the reason for the recent explosion of new languages is the emergence of technologies that make implementing new languages much easier, LLVM being one of the most obvious ones. Swift, Rust, Julia, and various new implementations of older languages all use LLVM. Implementing new languages on managed runtimes like the JVM and CLR is also much easier than building a full toolchain from scratch. It's also easier than ever to build a productive community around an open source language git and GitHub are amazingly effective collaboration tools.

The premise that old languages are pinnacles of perfection is simply not true. C, Lisp, Haskell, Smalltalk, etc. these languages did not get everything right. What they did do is get enough things right that it is really hard to make a language that is better by enough of a margin that it is worth breaking away entirely and starting from scratch. To make it worth switching to a new langauge, that language has to really make your life much, much better. Performance, convenience, safety, expressiveness whatever a new language gives you more of, it has to give you so much more to be worth the trouble of switching to a less mature language with a smaller, less developed community. But that's what people are trying to do with these new languages.

Consider Lisp as a potential pinnacle of perfection. Paul Graham quipped that Lisp was "discovered" by John McCarthy, rather than invented or designed Lisp already existed in the way that mathematical truths exist. That's a cute idea, but clearly not literally true. There were still a lot of design choices parentheses for example. Why not square or curly brackets? Why not indentation? There were also choices that are now almost universally recognized as mistakes. Dynamic scoping, for example, which was later replaced by lexical scoping in Scheme.

People who haven't tried their hand at language design generally tend not to fully appreciate how many unfortunate tradeoffs are inherent in the process. Static vs. dynamic? Both have great benefits as well as major drawbacks. That's just the first major choice and each choice affects most of the rest of the language. A coherent language design ends up being a crystalized fractal of difficult, uncertain choices. You never know when the difficulties you're facing in one area might have been easier in some nearby fold of this vast, combinatorial design space most of which is completely unexplored. The problem is compounded by the fact that although it may seem mathematical, language design is really a subfield of applied psychology: ideas often seem great on paper, but when you try them out, people find them incredibly awkward, unintutive, or just plain annoying.

rayiner 3 days ago 2 replies      
> When I read about Smalltalk or Lisp or Haskell people regard them as the pinnacle of programming language design and yet their popularity isn't really proportional to those statements.

That's like saying you read about Bob Dylan being the pinnacle of songwriting, but his popularity compared to Beyonce not bearing that out.

nmrm 3 days ago 2 replies      
Caveat Emptor: All the analysis below pertains mostly to type system features and other "surface observable" aspects of the lanugage. Newly maturing compilation techniques are certainly another reason for the recent explosion (e.g. Rust, Haskell). But I'll stick to what I (ostensibly) know.

> I have no particular background in programming languages design and theory

Well then, good news: most of these new languages -- especially those you mentioned -- were invented primarily with software engineers and programming in mind. That said, all are informed by ideas which emerged as PL design principles in the 1960's-1980's and became well-established in PLT academia throughout the 70's, 80's, 90's and 00's. Haskell is definitely an exception is many ways, but at least the essential ideas driving the type system design were there in the 80's. (with the possible exception of Haskell, where the "old ideas finally getting to market" analysis is a bit less true).

> I've been also on an exploration lately into the history of computer science and reading about the Lisp family and Smalltalk as they seem to viewed as the better designed ones.

I don't know about better designed. A better characterization is that they capture some essence -- lisp, smalltalk, SML, Haskell, etc. were all designed and implemented to demonstrate the feasibility of a certain programming style or discipline (as well how that approach makes certain problems really easy when they weren't easy before.)

> So what I don't understand and hope somebody here could shed some light on it is what's with all the new languages?

> How many of them really bring something new to the table, a better way than the old one?

> How is Go or Rust better than C C++ Ruby Python Lisps Java Smalltalk Erlang and whatnot.

A detailed answer would consider each pair. But broadly:

* These languages typed, which contrasts them from the dynamic family (including lisp).

* These languages tend to favor composition over inheritance, which differentiates them from (canonical) Java.

* These languages tend to make typed functional programming first-class (syntactic and compiler support for lambdas; pattern matching; etc.)

* The examples you've provided -- Rust, Go, Swift -- are more systems-oriented than Java and are not based on a VM.

* Lots of smaller things. E.g. apparently avoiding C++'s slow builds were a major design point for Go.

> Are those languages designed for very specific cases where older languages can't cope with.

Yes. All are designed to address some significant flaw with existing languages. Most were created because for an important set of language requirements, there exists a language which fulfills each requirement but no single language which fulfills all requirements. (Again, Haskell stands out as an experiment with laziness if I understand the history correctly).

> When I read about Smalltalk or Lisp or Haskell people regard them as the pinnacle of programming language design and yet their popularity isn't really proportional to those statements.

> How do languages get popular?

This is an area of active research (search for SocioPLT [1]). The common wisdom is "library support + important problem niche". The library thing strikes me as tautological.

> Money, syntax, portability?

The first is certainly a major reason the # languages exist :-)

> Why did PHP rule the 90' and not Common Lisp or Erlang or whatever.

Oh dear. Let's just agree that "quality" does not equal "popularity". Bieber > Vienna Philharmonic?

> Why do I read so much bad stuff about C++ from smart people yet it's one of the most popular languages. Why isn't Objective-C more popular since it is too C with classes? Why Java and not Self?

You'll receive lots of conjectures. I'll leave that business to others.


edits: formatting, adding link to splt

haberman 3 days ago 0 replies      
You sound just like me of about 12 years ago!

I remember thinking: "I keep reading all this stuff about how Lisp is so much better than all of the popular languages I know about, so is it going to start taking over soon? Is C++ about to go the way of the dodo?"

12 years later, C++ is still around and about as dominant as it was 12 years ago. So I guess the first thing I'd say is: PL enthusiasts on the Internet are not the best indicator of what's about to get big. My best explanation for this is: PL enthusiasts have a somewhat different set of values and aptitudes than mainstream programmers:

- a PL enthusiast is willing to invest a lot of effort into learning and using a language/tool that they think is better. Mainstream programmers will usually go with what has a lot of momentum and support.

- a PL enthusiast usually has a knack for thinking very abstractly, so what looks elegant to them will often be very difficult for less abstract thinkers to unpack.

- a PL enthusiast is usually more concerned with making a language fit an elegant mathematical model than making it fit the model of the underlying hardware.

So PL people end up loving languages like Lisp or Haskell because they are much "cleaner" from a mathematical/abstraction standpoint (particularly in how they eliminate or tightly control side effects). And even though the mathematical models aren't very close to how the hardware works, people have invested a lot of work into making the compilers optimize things so that they are often very efficient -- comparable to what you'd get if you wrote things in a much more "manual" way in an imperative language.

However, because there is a lot of transformation that happens in the compiler, it can be very hard to predict how efficient the program will actually be. You're sort of at the mercy of the compiler -- it can completely change the big-O in both time and space! So while the language itself gave you an elegant way to say something, you may have to get your head around the language's evaluation model and optimizations before you can understand why it has the performance characteristics it does.

For example, one time when I was trying Haskell I wanted to know if a trivial function I wrote took O(1) or O(n) memory. The people on the Haskell list were very helpful, but look how much analysis it took just to answer this simple question!


But languages like Lisp and Haskell are still highly valuable even to the "mainstream" in that they explore a lot of powerful and abstract concepts, and these feed into more mainstream languages. 10-15 years ago few mainstream languages had "lambda" (from Lisp), now most mainstream languages do (JavaScript, Ruby, Python kinda, Java, C#, even C++). Algebraic datatypes (from Haskell) are showing up in Rust. So I think of Lisp/Haskell as idea incubators that make powerful features a lot easier to add to more mainstream languages, because Lisp/Haskell have already tried them out and run into all the questions and edge cases around them.

So now your next question: why all the new languages, and will any of them take off?

New languages are exciting when they can open up new possibilities. But the downside is that languages have strong "network effects" -- integrating different languages together is a pain. Languages succeed when the plusses of the new possibilities outweigh the inherent costs of using a new/different language.

You listed a lot of languages but the main one I want to talk about is Rust. Rust opens up a huge new possibility: the possibility of getting memory safety without giving up performance or control. No mainstream language has ever done this before.

Traditionally you have had two choices. Either you get top performance and control with a memory-unsafe language (C, C++) or you get memory safety while tethering yourself to a garbage-collecting runtime (Java, C#, Python, etc).

(People will come out of the woodwork here to argue that their favorite GC'd language is faster than C and C++ on their favorite benchmark. Such benchmarks usually tend to be a bit fishy, but this is beside the point. The point is that C and C++ give you the control to do whatever the other language might have done to beat you. Other languages winning is just a local maximum, in which the C or C++ programmer has not yet optimized their program to win. The reverse is not true: when you are tethered to a garbage-collecting runtime, there are certain behaviors built-in that you simply cannot work around).

What makes Rust exciting and very new is that it gives you the best of both worlds. Rust is memory-safe (except in localized "unsafe" blocks), but does not impose any kind of runtime or GC onto you. This could completely change the way that we write performance-critical software.

chubot 3 days ago 1 reply      
> How do languages get popular? Money, syntax, portability?

One particularly good way is to be attached to an OS or platform.

- C came with Unix (although was so good that it migrated off it to Windows and basically every other platform).

- JavaScript came with the browser

- C# comes from an OS vendor; Microsoft. They built APIs for their platform in C#.

- Likewise, Objective C was for NeXT, and Swift is for iOS. They built APIs for their respective platforms.

- Java is an interesting case because Sun wanted the JVM to be an OS, to replace Windows, but they ended up with just a language. This is great evidence that a language itself is unprofitable; an OS/platform can be hugely profitable.

You have all the main OS cases represented: Unix, Apple, and Microsoft.

Google is sort of an OS/platform company, with Android and ChromeOS. However they reused Java in the former case. They designed their own VM (Dalvik) instead of inventing a new language. For the web platform, they are designing and implementing Dart. For the "cluster of servers" platform, Go is very appropriate.

Mozilla is also a platform company; it's not surprising that they are investing in Rust.

So my takeaway is that OS/platform vendors are the ones with the main interest in the huge effort of designing and implementing a language. How successful the platform often has more to do with the success of the language than the language itself. Java might be the exception.

norswap 3 days ago 4 replies      
My take on a few languages you mentioned. I'll try to stay as neutral as possible, but some things are bound to be controversial.

- C#: Microsoft's answer to Java, supposedly does some things better (Java seems to be catching up some), but cross-platform support is so-so.

- Go: I don't understand Go. It seems to be conceived as an improvement over C, and it gets many things right (and a few things wrong, like error handling). Unfortunately, it gets the most important things wrong: performance and low-level access, which are the only reason anyone uses C nowadays. If you don't need C's performance, you get languages that are much nicer and faster than Go (like Java or C#). As a result, it drew Python programmer rather than C programmer, because Go is still faster than Python, and feels quite similar to basic uses of it. Also Go seems to draw people who have drunk too much of the anti-OO kool-aid.

- Swift: A bit too new to tell. Objective-C was a notable improvement on C without incurring the complexity of C++. It suffers of a bit of Go syndrome, but Apple forces you to use it, so there's no debate to be had. Swift is an improvement over Objective-C. It seems to be that this heritage lead to some shoehorning and there are maybe clunky angles to how some things were designed (i.e. the type system).

- C++: many people have said it, C++ is very powerful but it's way too easy to break everything in a subtle manner without realizing it. The problem of C++ is that it has a very large set of core features, which can all interact in ways that are hard-to-predict if one is not a language lawyer. C++ is the opposite of elegance in language design. Despite this, it is used because it is fast and gets stuff done (good expressiveness). And if you run into strange feature interaction, you can always work your way around them by making the design a bit more ugly, thereby avoiding to have to gaze into the pit of hell.

- Rust: very interesting because it promises more safety when doing low-level work, while retaining performance. I'm still waiting for the development dust to settle to give it an in-depth look.

- Smalltalk: the language itself is nice enough, kind of like a Ruby that would have been pushed to the level in terms of meta-programming. The environment, however is awful. The "image" in which you work completely traps you, and has a super poor UX despite the inclusion of very powerful introspection/debugging tools. At any rate, Ruby is mostly good enough, and you rarely need the added meta-stuff from Smalltalk.

- Erlang: genuinely useful for its use case, distributed systems. This is a language where the intended use was really woven in the language design, to great effect. For the rest, it's a bit like ML without types. Personally, I see no good reason for leaving out types, so that tends to annoy me a bit.

- PHP: Many things (mostly bad) have been said about it, and many of them true. However, its success is not undeserved in the sense that it was a very easy language to get started with, from the fact that it could be embedded inside the html directly (allowing for nifty cut-and-pasting) to the availability of easy-to-configure servers. It also has top-notch documentation.

- Common Lisp: The problem of Common Lisp is that it feels old. Many things seem antiquated, especially the library ecosystem. It's very hard to tell if there are good libraries, because the ecosystem is so scattered. Some libraries may not have been worked on for some time, but still be adequate, but that's hard to tell beforehand. There is few endorsement/sponsorship of libraries/tools by organizations or companies; most artifacts are the product of the work of some lone hacker (at least, that's how it feels). Maybe quicklisp is solving the problem, but then again, it's in "beta" since 2012. As for the language itself, well it is quite nice with all the macros and stuff, albeit I once again miss types (mostly for documentation purpose, as Lisp can sometimes be quite cryptic). Typed Lisps exist btw, such as Shen.

- Javascript: Javascript reminds me of Lua, in the sense that both languages have a quite small set of basic features that turn out to be remarkably expressive. There are obvious problems however in Javascript, which are mostly the consequences of how fast the language was produced. Under the circumstances, it turned out admirably well. Javascript became popular because that's what was supported by the browsers, and this looped into a spiral of support/development.

klibertp 3 days ago 0 replies      
> When I ask those questions I am in no way trying to discredit new languages and their usefulness, I am just young, naive, not very smart and trying to get and idea of how the real world of programming and computer works.

Welcome to the war.

Please don't hold any hard feelings for the community if you get flagged or downvoted to hell. People who will do this to you are generally smart, sympathetic and considerate individuals who just were on the frontlines for much too long. Being cold-hearted and eliminating every threat swiftly, no matter how innocent it seems, is the only way of preserving one's sanity here.

I'm a PLT and Type Theory enthusiast, although I lack any formal education in this direction. I try to follow new research and I'm constantly learning new things (like the ones from the '60 which were then forgotten) and really new things (original research happening now which acknowledges what was done in the field already). I graduated (last year) from just learning new languages and I'm writing my toy languages (thanks to Racket's being an absolutely wonderful framework to do so), but I still learn every single language that seems interesting. This includes both nearly-mainstream languages like Erlang and the ancient, largely forgotten like Prolog, APL and Forth (which you should include in your list next to C, Smalltalk and Lisp).

I'm fascinated by the notion of computation, of how we can encode computation, how we can reason about computation and how we can transform computation to preserve its semantics. I'm fascinated by language design: what features a particular language has and what it omits, I'm always trying to discover what kind of turtle (and if really all the way down) a language is built upon. I'm feeling happy and safe reading papers from Racket and Haskell people, it feels like I'm reading a suspenseful novel in a quiet library somewhere.

Then I go to StackOverflow or here and the reality hits: screaming, shooting, blood and intestines everywhere, people fighting for their salaries and self-respect, so ultimately for their lives.

You'll hear about technicalities from other people here: type systems, concurrency primitives, memory safety and direct memory access, static vs. dynamic (not only typing), syntactic support for common idioms, having (or not) a built in support for certain concepts (like inheritance or composition). I'm not going to tell you about all this. I'd love to, and I really like the topic, but I feel that you wouldn't benefit from it nearly as much as from the other half of the story.

You see, programming languages are tools which people make for people to use. Not only that - both the makers and consumers do what they do to feed their families. I recently saw a Byte magazine from 1980 (IIRC) where I saw an ad of TinyPASCAL, which promised 4x increase in speed over the equivalent code in Basic. It came with some additional libraries (and it was available for a couple of different machines) and cost $8. There was another ad, which claimed that you won't ever need another Fortran after you buy the one being advertised, because it was fast and had additional libraries, for example (IIRC) for calculating log (or lg). It was some $15, I think. Not having lived then I miss a lot of context, but what I see here is that people were using programming languages to make money for quite a long time.

This is not a problem in itself. The problem is the nature of our industry, which is for the most part impossible to measure or experiment with. When have you last heard about double-blind (how would that even look like...) experiment of building the same large corporate system 5 times with different tools and simultaneously? I didn't. And that's not all. We are certain about some things, because the mathematicians discovered some very clever proofs of these things. But they are rare, few and far between. For my favourite example: what "readability" even is? People fight to their last breath and last shred of dignity for their particular take on readability, yet we don't have a slightest idea what the hell readability is, let alone how it impacts us. It's the same, just many times worse, with other features, like famous allowing assignment in conditionals, or preferring mutability over immutability, or providing pointers or not and so on. We know for sure that, if the language is reducible to a very few operations which form one of the basic models of computation, that it's able to express everything expressible in every other language. That's a baseline and it's basically useless, because there are real differences between how good are different languages as a tools and we have no idea at all what makes the difference. We have lots and lots of anecdotes, though.

All this - people wanting better tools and people getting used to their tools, people designing new tools and people marketing the tools they make as better, and having no meaningful way of defining what "better" even means here, but having a vague feeling that how good the tool is directly impacts your performance and your pay leads to the current situation. People have their beliefs, and there are people - some sincere, some not so much - who profit from their beliefs. Languages are being viewed as tools for writing software and for generating revenue... both by corporations and individuals. All programmers make decisions about which philosophy, which belief system to buy into and they all know that this decision is an important one. For companies it - having a language with large following - can make a whole difference between winning and loosing on the market. Similarly for individuals, belonging to a particular tribe makes them feel safer, they can more easily ask for help, they can find jobs more easily. It's really a circle of illusion which works, because it is economically possible for it to work, and because no one can really dispel that illusion (of knowing what "better language" means, for example) yet.

So, to answer your question - what makes languages successful or not? Please do read other answers and pay attention to all the technical details, they are important - but in the end I believe, at least for the last 40 years and some more to come, the answer is really simple: people. It's people, which are social creatures, which have emotions, which are susceptible to manipulation, which are rebellious, which are compliant, which are used to things, which are tired of things, which have wants and fears beyond and above technical matters - it's just people who make languages successful or not. It's almost purely a social issue. Think for a moment - what does it even mean for a language to be successful? Doesn't it mean to be popular with people?

Tyr42 3 days ago 0 replies      
Lets look at PHP a little bit. It made moving from a static site of just html files to a slightly dynamic site dead simple, just rename the file .php, and add in a few <php? blocks. And then it was deployable with just ftp, which helped because some hosts didn't give ssh, and many people wouldn't have know how to use ssh at first.That's why it "won" on the server side, at least for small sites. It solved the problem of "I don't know much about web programming, but I have a website and I want it to do a bit more" really, really well.It doesn't matter if it lacked higher level features to them. So it didn't have them. So experienced programmers, who knew how to get cgi scripts running and could make a website using a "real" language look down on it, since it doesn't add value to them, and, frankly, it does suck a bit. Tons of gotchas, but they couldn't fix them once it became popular so fast. It'd be a much better language if it had time to mature before becoming popular.

That's actually a similar story to Javascript, since it really didn't have any time to mature before shipping out to everyone. But I think both languages have improved as they've been upgraded. But make no mistake, we could have built them better if we started over now, and didn't have to worry about backwards compatibility. We have learned which parts we'd want to keep and which parts might require some ironing out.

Now, for the longest time, Haskell had a unofficial motto of "avoiding success at all costs"[1], (page 10). "When you become too well known, or too widely used and too successful suddenly you cant change anything anymore. "

So, it's not a big surprise that Haskell isn't super popular, since the creators don't really benefit from it being super popular, and it makes their research harder.

[1]: http://www.computerworld.com.au/article/261007/a-z_programmi...

Do check out this article, it's great if you want to learn about languages.The whole site is.Page three talks about how languages pop out of nowhere: "In my experience, languages almost always come out of the blue."

Let me look at a few new languages

Go:It works great for concurrency, and shuns the hierarchies of OO for interfaces, but keeps the nice syntax. It feels a lot like Python even with it's static types. It's lack of proper generics cause it to get looked down upon sometimes by PL folks, and it's GC make it unpalatable for C/C++ tasks. I'm sure it's useful for Google.

C++11:It feels like a different language from C++. A lot of the verbosity of doing things the idiomatic way falls off (`for(const auto& x : things) {}` is much better than the old way). It definitely makes the language better, and can help speed it up and make it safer too.

Rust:It actually feels a bit like C++: The Good Parts, plus all the concurrency goodness from Go, and the little things you hate going without from Haskell (Algebraic Data Types is a big one). It's pretty ambitious, but if they can pull it off, I think it'll one of the best languages.

I'll pick Rust to beak down your question about how I think it's better.It's "better" than C++, because it leaves out all the foot shooting and messiness, and has just the good parts. And it's nice to have Option types without pulling in Boost. Compared to Ruby, well, it's aimed somewhere different, but I think it's faster while being at least close in expressively. Ditto for Python. Lisp, well, again, it's aimed differently, but Rust does have macros and strong functional programming support. Personally, I'd take the type system and leave Lisp behind. Java? Well, apart from not running on the JVM and being more complicated, I think you can say more clearer and have it run faster in Rust.Smalltalk? I don't know if Rust is better, I haven't used smalltalk at all.Erlang? This one is actually somewhat comparable, since both have strong functional programming support, and good concurrency. I think you can actually do more in Erlang, with it's actors approach, and it certainly wins with the hot code swapping and really cool features there. And Erlang also has better bit level logic support. But those features are exactly what are needed for Erlang's niche, so I'm not sure if I'm being fair. I can't say if one is better than the other here.

Swift:Wow, this one is new. But, it does take some of the things I really like, such as Algebraic Data Types (it's enums), along with things that you really expect from a modern language these days, such as tuples, lambdas/closures, map, filter, and generics (I'm looking at you Go!). It also inherits a bit from Objective-C, and I think that's at least partly why it is it's own language, and not some other language with some libraries. Also that playground feature seems like it's pretty neat; it's what Bret Victor was talking about.

Does my rambling help in any way?

PS: Haskell isn't the pinnacle, it's just a gateway to Idris :D

ced 3 days ago 0 replies      
Paul Graham's answer to why some languages become popular: http://www.paulgraham.com/popular.html
patrickmay 3 days ago 0 replies      
"So what I don't understand and hope somebody here could shed some light on it is what's with all the new languages?"

While one can make an argument that these new languages address a particular need better than any extant language, I suspect the real reason is that it's more fun to create tools, including languages, than to solve particular business problems. As evidence, I offer the plethora of frameworks, libraries, and utilities that comprise the ecosystem of Java in particular. In many enterprise systems the business logic is a small fraction of the total running application.

"When I read about Smalltalk or Lisp or Haskell people regard them as the pinnacle of programming language design . . . ."

Lisp wasn't designed, it was discovered. ;-)

Thanks for the interesting questions.

Slackwise 3 days ago 1 reply      
> How many of them really bring something new to the table, a better way than the old one?

'Better' being subjective, but there are languages, or classes of languages, that bring new paradigms that change the way you approach a problem. Some may work better with the way you mentally model a problem, or they may naturally help with modeling certain problems.

So we've got...

- Imperative sub-procedure languages, like C, Algol, Fortran, etc.

- Object-oriented variants of C, like C++, Java, C#.

- Smalltalk, and Smalltalk OOP based languages like Ruby and Objective-C.

- Forth, a stack-based programming language.

- Tcl, a command-based programming language.

- Unix shells, string-based programming languages.

- Lua/JavaScript, prototypal/hashtable oriented languages.

- Lisp, tree/list-oriented languages.

These are the languages/classes of languages you should study, if you want to see something different. Something that may change the way you think.

mamcx 3 days ago 0 replies      
Well, exist a very strong mythology around the idea that language A = language B, is only syntax sugar. So, some people don't see the point of create new languages (or, why not extend the old ones?).

>So what I don't understand and hope somebody here could >shed some light on it is what's with all the new languages? >How many of them really bring something new to the table, a >better way than the old one?

Probably the term "language" is a bit misleading (and fuel the notion that 'english'=='german' just different) and is better to think in machine builders, where its interface is based in combinations of words, but the words ARE NOT WORDS.

So, is posible to build a better machine builder than others? Of course. Some are very linear (and fast) but not that good at make parallel work. Some are very unsafe. Some are complicate to operate. Some are very non-sensical, where turn left mean instead self-destruction. Some requiere a lot of steps to produce the end-work.

The beauty of a language is that a SINGLE word can not only imply a meaning, but also is EXECUTABLE with a behavior.

go ...async ..for ...spawn ...

Is like have a machine that chomp wood. It could be made of hundreds of small pieces. Or it can be a axe, in a single iron mold.

A new language can be made when is understand that is possible to get NOW the axe and chomp, instead of build it like in minecraft. Even if the end result become the same (dude, people do insane things in minecraft) your way of THINK change if you are NOT PLAYING MINECRAFT but instead, something else.

Some languages try to move closer to the "I have a axe right now, let's move on" faster than others. IE: Some machines are more low-level than others.

With that idea on the mind, a language (machine builder) designer start to see some things: Even if have minecraft-level sub-machine builder is important (ie: The parts that almost all languages have like for, if, list, chars) is another level, game, to have machines tailored to some task.

And if you extend the idea far enough, you can see that is better to have several of that specializations of that in a single package. If the mix going well, you have a happy factory worked that is very... happy!. Or you have another crazy machine where turn left mean self-destruction. But well...

Of course, some natural limits are hit because the limitations of the computer architecture itself (and the limitations of the factory worked), but as I say:

Some people do insane things with minecraft.

ksherlock 2 days ago 0 replies      
A couple thoughts on C++ vs Objective C...

When I learned c++, it was sold as a better/safer version of C. You had function prototypes, const, inline functions, improved compiler warnings, etc. Some of those improvements made it into later versions of the C standard. I hope C89+ is more popular than K&R C for new code. You could slowly ease into and benefit from day one without ever using a class.

Objective C is strictly the classes and runtime so there's no benefit unless you jump right in.

x43b 3 days ago 0 replies      
Maybe the increased number of people on the internet is connecting those who are making open languages. (I know the poster listed many ones made by closed teams too.)

I thought the technical/scientific computing market that MATLAB serves was too niche to get critical mass in an open competitor that could surpass it. I saw Octave as always being a second place clone playing catch up. I don't know what it took to get it going but Julia has me very excited and I'm grateful for the team that chose to make it.

fernly 3 days ago 0 replies      
Never never underestimate the power of N.I.H.[1] in human affairs. Creative people with time to spare can't resist the temptation to think "how would I do that? oooh I can think of several tweaks that would make it better. I should totally make one of my own." And then their work becomes "held territory" for their coterie or organization to be defended and enhanced and bingo, you have a new language or database or protocol with a community, and the more effort the community invests in the thing, the more stable and important it becomes.

Really, it's the intellectual analog of the process by which a whirling disk of dust becomes a system of planets, some big, some small...

[1] http://en.wikipedia.org/wiki/Not_invented_here

mc_hammer 3 days ago 1 reply      
It seems like its an evolving thing -- maybe like car design... there is language design also. All of them bring new things to the table, and the good ideas are then debated by designers and copied into other languages.

Languages get popular because of the people who use them. PHP ruled because it was easy to use and had a ton of tutorials - with a huge userbase to answer any question.

I'm not sure why people knock C++, its ugly but its fast. Obj-C is popular, just less popular than c++ (I think? Perhaps there are just easier ways to create apps for *nix and windows than Obj-C). I'm not sure about anything Java.

Javascript was an exception, IMO, because... they had a monopoly on being the only language that lets u modify webpage content programmatically.

hyp0 3 days ago 0 replies      
complaints usage: There are only two kinds of languages: the ones people complain about and the ones nobody uses. Bjarne Stroustrup

  tl;dr they want to make things better
Languages are like products in a market that solve a problem. Many factors, product and non-product, make it hard to predict. e.g. do people know about it? how easy is it to get started? has a core vocal and influential group picked it up? How exactly does it solve the problem? Can it be enhanced or bandaided so it's workable for problems that it almost fixes?

But worse than products, languages are high-tech products. This makes them harder to evaluate, so the bandwagon effect is even stronger (oh, smarter-than-me guy says this is cool, I'll believe it). That makes it even more unpredictable.

But worse than high-tech products, there are network effects: it matters hugely how many other people are using it... because they make libraries which makes it even better. They also use your libraries, making it more attractive. That is, a language is a market, itself. This makes it more unpredictable again.

Finally, why do people make new languages? Well, there is real progress in language design. People just want to make things better. For example, Go is written by the C guys... they want to make it better. (NB: no guarantee of success! those guys also wrote unix, and tried to improve it with Plan 9. "What's Plan 9?", you ask curiously. Exactly.)

Of course, the big companies with money also want to capture developers, instead of sharing, so instead of one language with the cool new features, you have several. Just like in most markets, when there's an improved style of product.

EDIT what about smalltalk, lisp, haskell? partly it's the bandwagon effect that passed these by... partly it's the purity of a cool idea. This makes them attractive to idealists, and unattractive to pragmatists. e.g. homoiconicism is a very elegant idea, but awkward, complex, unintuitive - everything is sacrificed to its pure beauty.

These are like indie artists who haven't sold out.

protomyth 3 days ago 0 replies      
We are dealing with a much different environment now since we cannot count on an ever faster single CPU. We also must deal with an environment where your program can be attacked via the network or how it handles memory.

Its really about time for a new set of languages given a historical view (after you remove some of the distortions brought on by the Java bankroll).

baumbart 3 days ago 0 replies      
So, the first thing you have to think about is: What is a programming language? Or better, what is the purpose of a programming language? PLs give the programmer a way to express their idea in such a form the computer can understand. Here are two aspects already: 1) Expressing an idea, and 2) interpretation by the machine.

Certain PLs exist to formulate certain ideas in certain ways, that the computer interpretes in certain ways. That way, the popularity of a PL depends on

1) how many people think that way,

2) how much effort those people put into developing the needed tools

3) how much this way of thinking is needed and supported by the industry

4) how well this way of thinking is compatible with previous work

5) how well the computer can execute these expressions using its architecture

6) what architectures exist for which purpose, and whether these purposes comply with the way ideas are expressed in a PL

7) ... and so on, this list is endless

For example, stack-based CISC computers using the von-neumann-model have a long history and are very powerful these days, and using software has become common in non-IT industries, which is why object-oriented imperative programming languages like Java and C++ are so common.

When some great programmers love a special language because because it matches their way of thinking, then it's most probable that this PL is not very popular, simply because few people think this way. A genius may invent the mightiest programming language in the world, but nobody else would use it because nobody else could understand it.

You could say, the only thing that a PL actually expresses can be seen on the people who use it.

bcoughlan 3 days ago 0 replies      

- LLVM is an awesome project and quite mainstream now, making it a bit easier to write an optimized compiler.

- Rust: C is a language built for single core use. The future is many-core machines. Mozilla realized that the archaic C language was making multi-core processing far more difficult because of missing language constructs, slowing down development and holding back the future of browser performance. The idea is that multicore/multichip aware languages can greatly simplify developing parallel applications.

- Go: Also aims to modernize "systems languages". Dependency management, better type systems, garbage collection, parallel computing. multi-core awareness, compile times. http://mashable.com/2009/11/10/go-google-language/ . It's your C/C++ replacement.

- Swift: Probably an Apple move to attract more app developers and to increase the quality of apps with better tools.

So the answer is both because the computing landscape is changing, and the move towards Python, despite its performance issues, signals developer demand for better tools.

Remember that HN/proggit users are generally interested in new ideas and ways of working, and most people working in industry have probably never heard of Haskell. HN is also susceptible to marketing from time-to-time - MongoDB and Rails were two huge trends that did not deserve their popularity, at least at the time.

snarfy 3 days ago 1 reply      
It is an error to equate a programming language used for program construction with a (spoken) language used for communication. It is advantageous to have everyone use the same language for communication, but that's not true for construction. Different construction jobs require different tools. This is why there is a tendency for more programming languages, not less. They are tools. Languages for communication are more like protocols, which there is a natural tendency to reduce, just like spoken languages.
agumonkey 3 days ago 0 replies      
PL are one piece of the (user,problem,tool) trinity. Every time you ask yourself why ? the reason is because for a particular triplet, it was the best solution.

Give a newcomer sml with no easy way to integrate with a HTTP server and watch the confusion grow. On the other hand PHP has good apache integration, is a simple platform : a .php file with html and code, press F5 observe your results and is a deceptively non complex language.

aaronsnoswell 3 days ago 1 reply      
"How is Go or Rust better than C C++ Ruby Python Lisps Java Smalltalk Erlang and whatnot." - sure fire way to start a flame war with programmers ;
pigDisgusting 3 days ago 0 replies      
NhanH 3 days ago 1 reply      
Can anyone point me to the story of js? Did it get popular because it was the better language (as it seems to be implied by OP)?
torom 3 days ago 1 reply      
I see all these languages as tools in the battle between the big companies. Each language serves the purpose of the power behind it. See my review of this list here: http://tracks.roojoom.com/r/11224
Thiz 3 days ago 0 replies      
Languages are like operating systems, browsers and search engines.

Every big tech company has to have one.

Xcore 3 days ago 0 replies      
A hypthesis: Languages are no mean in itself. They are used to generate programs for specific purposes on specific plattforms. The availability of the plattforms and the need to create software for them makes the language popular. C for Unix/Linux, JavaScript for the Browser, C++ for Microsoft Windows, Java for Business stuff* and Android, Ruby for Rails, Objective-C for Mac and iOS, C# for .net.

* Sun invested a billion in Java to replace the more costlier Smalltalk. Instead of competing with Sun, IBM ditched Smalltalk and just went with Java, too.

vezzy-fnord 3 days ago 0 replies      
I'm not entirely sure, but I believe Go is basically a continuation of Rob Pike's vision in terms of how computing should be in general. (Plan 9, acme, rio, procfs, etc.) It's the spiritual successor to Limbo, which itself was the successor to Newsqueak. They basically extend upon the general model of C, but add things like built-in concurrency (inspired by CSP), conservative garbage collection, type checking and so forth. They also aim for simplicity and removing complicated features (see also cat-v.org and "harmful software" to understand the philosophy).

As for C++, Java and so forth, popularity is no indicator of quality. That and Smalltalk/Smalltalk-esque languages had rocky starts, including difficulty of acquiring development environments and performance overhead.

EDIT: Concerning Objective-C, it's pretty tough to work with it outside of an OS X-related environment, because of the lack of essential libraries. There's GNUstep, which tries to fill in the gap, but it remains very behind and it has very little development going for it.

sillysaurus3 3 days ago 2 replies      
How is Go or Rust better than C C++

Use C or C++ and then try out Go or Rust.

       cached 19 June 2014 12:05:01 GMT