These days it's just software. You have free software that gives you a limited user experience or timed trial to decide if you want to buy the full thing.
Look at any app store and look at the free rankings. It's practically full of nothing but "lite" versions that only exist to give you some features to help you decide whether you want to pay for the full version.
If anything 'shareware' is more alive than ever although it goes by different names these days, 'lite', 'freemium', etc.
In many ways, shareware has become the "default" method for distributing commercial software, and it's non-shareware software that's kind of weird. This even happens on the high end. I worked for a desktop software company years ago, and we gave away our software on a 30-day trial, if they liked it, a seat cost $30k. It was called the "30-till-30" model by our sales guys who didn't realize it was just shareware.
Looking at my own list of software I have installed right now:
Chrome - free with open source version
Firefox - open source + donationware
Thunderbird - open source + donationware
MS-Office - shareware
Foobar - open source + donationware
yed - free, but with commercial tools as part of the ecosystem, this makes it in my mind pseudo-shareware
Gimp - open source + donationware
Simcity 4 - fully commercial
Notepad++ - open source + donationware
Sublime Text 2 - shareware
FileZilla - open source + donationware
Mirc - shareware
Anki - similar model to yed, desktop version is free, mobile is paid
Bulk Rename Utility - donationware, closed source
Caustic - similar model to yed, desktop version if free, mobile is paid
Pycharm - shareware
renoise - shareware
bunch of steamgames - most started as a demo, so I'll go with shareware
skipping over python, perl and the usual open source suspects
and on my phone: most started as a "lite" version so many of the apps are all shareware
I just sold my business which did this back in April -- it supported me above my previous day job salary for a while back in the day, before the rest of my business eclipsed it. I was, ahem, very much not the most successful HNer with the model, but many of the others like to keep things under their hat.
At least one received a check written on purple paper with an exclamation point on it, as if the dollar amount wasn't an exclamation enough. (He's occasionally active on HN and can tell you the story if he wants to, but it isn't mine to tell.)
[+] I used to be a card-carrying member of the Association of Shareware Professionals, which is now the Association of Software Professionals, because the membership expressed its opinion that the shareware branding communicated "crappy software which will give your Googles a virus but is otherwise free."
As an example, Andy Brice blogs about his shareware business at http://successfulsoftware.net/
I have long-time friends who live very comfortably from a small herd of shareware products. I also know others who decided to grow at some point and now operate moderately-sized software shops that too are doing well. All of these are on Windows, and nearly all of them are desktop software. One thing to keep in mind that smaller companies tend to put up a larger corporate facades, so the chances are that you've seen plenty of single-man shareware shops without realizing it.
I make a living from http://www.watermark-image.com and other sw for windows, I have et a lot of people at MicroConf who makes a living from sw.
What did "share" actually mean then?
The channel is the path from developer to end-user. At one time, one had to purchase hookers and blow for the distributors. In some respects the app stores are helpful but I regard them as eliminating our ability to determine our own destinies.
I think at a certain point you start to recognize that more tech isn't helping as much as it was (diminishing returns perhaps) and that a more holistic approach to improving is necessary.
I listen to most of the podcasts from http://www.radiotopia.fm/
None of them are directly tech related, but most of them have insights that are applicable to projects from a human perspective (eg discovering things about how people react to stuff).
http://www.economist.com/ - my second best feed (after HN)
http://www.datatau.com/ - HN for data science
https://johncarlosbaez.wordpress.com/ - Mathematics, Theoretical Physics
https://terrytao.wordpress.com/ - Mathematics
http://slatestarcodex.com/ - Less Wrong-kind stuff (the guy writes frequent and well, but somehow too verbosely)
http://visualizing.org/ - data visualizations
A bit of G+ (mainly, if not only, for a few guys in mathematics and physics).
* http://blog.codinghorror.com/ Jeff Atwood)
* http://www.catonmat.net/ Pete Krumins)
* http://blog.fogus.me/ (Mike Fogus)
* http://research.swtch.com/ (Russ Cox)
* http://effbot.org/ (Fred Lundh)
* http://adam.herokuapp.com/ (Adam Wiggins)
Podcasts in no particular order:
* http://www.dotnetrocks.com/ (NET Rocks)
* http://herdingcode.com/ (NET focused podcast with Scott Allen, Kevin Dente, Scoot Koon and Jon Galloway)
* http://www.coreint.org/ (A podcast about indie software development)
* http://www.talkpythontome.com/ (Python podcast)
* http://www.binpress.com/blog/category/podcast/ (Binpress podcast about digital products)
Magazines in no particular order:
* http://www.hackernewsletter.com/ (HN in PDF)
* http://www.codemag.com/magazine (Tech/coding news)
* http://www.drdobbs.com/ (Dr. Dobbs)
and many more.
Most stuff I find is too serious and I rather hear podcasts to entertain myself instead of trying to learn more stuff while driving.
edit - I also follow asp.net\community, techcrunch, robert scoble's updates, the hacker news, fb engineering, scott hanselman, guy kawasaki and few more tech resources via my fb news feed. I also watch few videos from time to time at youtube.com. MSDN blogs, Channel 9, mvc conf, dotnet conf are also in my reference list.
My problem here -I come across so much great content everyday but it is very hard to digest everything or keep everything somewhere conveniently to refer later. Currently, I email content links to myself. I tried pocket and other similar services but they do not have good features to retrieve or refer content later on. And, this is the reason I started work on this site - www.LinkSto.re few years ago. It provides you summary of articles that you saved, clutter\ad free reading. User profile to show you what they have saved.
Features coming soon - great search capabilities by tags, date or content. Calendar to locate stored articles or schedule reading for yourself or with your friends. Article recommendations.
I am really sorry for this shameless plug.
Episodes are usually small bites (~20-30 mins) of discussion/interviews on one of the upcoming technologies/trends by a couple of Andreessen Horowitz partners and an invited guest. Content is usually pretty insightful and they are really good at doing a thorough analysis of the current status of the tech industry.
2)BraveNewGeek - http://bravenewgeek.com
3)Antirez(redis) - http://antirez.com/latest/0
4)Aphyr - https://aphyr.com
5)GitHub's Engineering Blog - both old and new
6)Facebook Engineering https://code.facebook.com/posts/
7)Twitter Engineering https://blog.twitter.com/engineering
8)Code as Craft - Etsy's Engineering Blog https://codeascraft.com
and loads more... will update tomorrow.
EDIT: If anyone has any ideas, I'd love to hear them.
Codepen Radio http://blog.codepen.io/radio/
Software Engineering Radio is in my podcast software but I don't find myself listening to it much.
I have a variety of others more oriented to productivity and freelancing, but they're less technical. I do highly recommend the Home Work podcast by Aaron Mahnke and Dave Caolo - one of the few I have set to auto download.
1. Linux Action Show (http://www.jupiterbroadcasting.com/tag/linux-action-show/)
2. Bad Voltage (http://badvoltage.org/)
- Adrian Kennard's (revk - CEO of Andrews & Arnolds UK ISP) blog: http://www.revk.uk/
- GOV.uk's digital services blog [UX, Design, Govt]: https://gds.blog.gov.uk/
- Canonical design blog [UX & Design]: http://design.canonical.com/
- CGPGrey, excellent youtuber and podcaster [misc. history/politics/sciences]: http://www.cgpgrey.com/
- Martin Graesslin's blog on KWin/KDE [programming]: http://blog.martin-graesslin.com/blog/
- Alexander Brazie's (Blizzard/WoW, League of Legends) blog [game design]: http://xelnath.com/
- Eric McClure's random ramblings [programming, misc personal] - http://blackhole12.blogspot.com/
- EFF Deeplinks [tech politics/activism] - https://www.eff.org/rss/updates.xml
Also on gaming opinions, history and news: Totalbiscuit (soundcloud + youtube) and SuperBunnyhop (interesting pieces on game design incl. https://www.youtube.com/user/bunnyhopshow/videos)
I also follow some tech blogs in Spanish: Microsiervos, Fayerwayer, Manzana Mecanica, Hipertextual, Genciencia.
Devopsweekly http://www.devopsweekly.com/ is a good summary of major goings on.
A variety of FLOSS projects, usually entertaining and quite often I learn about projects I've never heard of before.Randal Schwartz et al. are pretty good at extracting interesting information.
But I do subscribe to a few key developer's blogs.It really depends on what you work on though.
3. Website: Subreddit Programming for my general interest in programming
4. Magazine: Harvard Business Review for understanding business needs. Reading business case studies help to align my tech skills with business needs. I find this combination particularly essential.
5. Magazine: MIT Technology Review for tech related research
6. Podcast: Nodeup for my nodejs interest
7. Website: Producthunt for uncovering products that I dont know.
Lastly something which you didn't ask. But I want to share is books and video tutorials. Books and videos recommendation is a whole new topic.
He doesn't post often, but when he does, the articles are almost always good.
The Jeff and Casey Show is a weekly podcast by software developers Jeff Roberts and Casey Muratori that is, for lack of a better description, almost completely random. Often both meticulous and erroneous, somehow both offensive and compassionate, and always unorthodox, the one thing you can say for certain about The Jeff and Casey show is that theres nothing else quite like it.
I also read LWN extensively; subscription highly recommended if you work anywhere in FOSS, especially if you work near the kernel.
I would follow EEVblog if it were a proper text blog, but I don't have time for video or audio blogs.
It touches everything and keeps me up to date on important security vulnerabilities. (Otherwise I would probably disappear in my coding cavern for months and not know what is happening on the surface...)
Some basic common sense stuff, but as a tech person its good to be reminded.
I'm a host, but I figured it's okay to post since I spend more time working on this podcast than I collectively do listening to others.
Watch a preview here: http://ratemyapp.com/video/6K_HgG_Xmf8/Walkthrough-Two-new-a...
If you want an audio version, sign up for the newsletter to hear when the podcast is ready!
That's not a podcast or blog, but it is a website and it is extremely good for keeping up to date on software security news.
entrepreneurs interviews http://mixergy.com
light financials - http://www.npr.org/sections/money/
personal development - http://theartofcharm.com/
He had stopped writing but, the contents there never fail to leave me with an enhanced perspective of things even today.
Then there is the security now podcast by Steve Gibson (and leisure Laporte).
Finally, I've found the Radiolab and Startalk podcasts to always keep me entertained and feeling smarter.
As for blogs I follow closely Paul Graham's, Sam Altman's, Ben Horowitz's and Alex Torrenegra's.
I don't follow or listen to any podcasts at all.
... so imagine my surprise when I received an e-mail (at the abuse@ address, no less) offering to buy uploader/downloader info (IPs, file info, email addresses, etc.)
Imagine their surprise when I told them that I didn't have most of what they wanted in the first place, and that they could kindly go suck a pig. I checked out the company in question, and they seemed rather sparsely established, so my assumption was that they were a shell company for somebody. Never really looked into it after I told them to go to hell, and never heard back from them. AFAIK there wasn't a lot of pirate traffic (I shut that down and banned/reported aggressively whenever I found it/was notified about piracy or other illegal stuff), mostly just niche content that I assume was original... so I doubt it was an MPAA/RIAA thing. Odd.
(Sorry for keeping names out of it. The site was super well-known within the community, and I'd rather keep my involvement in said community quite isolated from my real life.)
Glad to be out of the file host business, that's for sure.
This is OK in 3 scenarios I can think offhand: 1) A company collects personal/contact information on behalf of another and is upfront about this at collection 2) A company contacts their list asking if these people would like to share their information with a company 3) Permission to sell information is in the T&C on sign-up of the original company.
If one of these 3 is not covered I image companies should purge data if the business closes. Option 2 would be good for companies that are looking for a cash bump on the way out.
At a financial level I see a bunch of people with lists in the 10's of thousands and they are surprised how little it is worth. To earn a western level income from a contact list you'd likely need a hundred thousand plus of contacts assuming a typical consumer audience and reasonable response rates. Lists are worth significantly more for specific hard to reach groups like CTO's or surgeons etc. For me these would be 15x what I pay against a standard consumer list as a massive generalisation.
Funny, it gave me the impression that I was the first to say no and that most people would gladly sell off people's privacy for a buck. Sad.
I had a few people contact me and offer rather significant money for the info (in total over $10K) if I'd quietly sell them a copy before I deleted it - pretty disappointing to me that they thought I'd do that.
Many users have a different email for each service, for example email@example.com (gmail will ignore the '+' and whatever is between it and the @) so you get busted.
Someone else gets their marketing message out to his list, but doesn't get his emails.
With that said, this issue recently came up with Radio Shack and how they were planning to sell off their customer data.
One possible defense is to use an open inbox, publically available. Perhaps?
But I switched to https://runbox.com a few years ago.30 euros/year for 5 gb, 100 aliases, a very good hotline and the option to put your mails on a server without backup, which means that when you delete a message, it's deleted, not stocked on a backup (yes, if their servers fail, you lost everything you didn't backup yourself, but for now, it has never happened :)
And they can get you your own domain name for 15 bucks/year.
And they're green and in Norway and if you use their roundcube webpage, it manages GPG keys and yes, I sound like a fanboy :).
It depends on whether they already know who you are. If you've managed to remain completely anonymous, you can pressure them much easier since they can't retaliate with legal repercussions.
If they know who you are especially, but generally as well, i recommend talking to a lawyer.
Edit: Removed bit about phone/email. Good point.
This responsible disclosure policy was first put together by rain.forest.puppy. (One of the first people to discover SQL injection, and one of the founders of the OSVDB.) We have had good results with it, and nearly all the people that we have disclosed vulnerabilities to have found it to be more than fair, and motivating. The researchers have found that it also gets results quickly.
By default it requires you to disclose that you are following this policy, disclose the vulnerability, as directed in the document, then give them 5 days to respond. If you have done everything you could to contact them, and they will not respond, then disclose.
However, as others here have been saying, it may take a while to fix this problem. If they do respond, they may want to "negotiate" more than 5 days to fix the issue. That's great. Get some details, set up a reasonable timeline with them, and get a contact's information. Then it's up to you to hold them accountable. Sometimes this means disclosing on the agreed upon deadline, other times it means following up and seeing if more time should be given before disclosing.
The main issue, as you point out, is keeping users/data safe. If the company is unwilling to work with you, not disclosing could put other people at risk, because you didn't stop unsuspecting users from signing up for the service. On the other hand, disclosing without working with the company can unnecessarily put the current users/data at risk.
It's good to have a balance. The RFPolicy has helped me to have that balance when doing responsible disclosure. Give it a look over. It's not too late to use the RFPolicy now.
You've already talked to the company, so anonymously releasing the information is out of question, they could probably track it to you.
Do they not have any sort of policy on this? Maybe try to talk to their team again but make sure you get it in writing and signed first that you're not going to be held liable, and just make sure you're safe. Maybe even ask a tech-orientated lawyer first?
My advice would to just try to be nice and open to the company, but stay firm that this is a major issue. Maybe write up some documents with exactly how you found everything, what it could mean to their company if it got out, and what they could do to fix it.
Just really be aware of your safety/risk. If you try to help and they don't want to fix it, don't feel bad or unethical, you've done what you can.
1) I mailed the company again saying that they have not yet addressed the issue. And that the vulnerability is now critical given how much info they are adding per day. Expressed that I would like to know if a patch is in the works.
2) Contacted several people in the IT security and audit business and asked what the standard procedure was. The response from our CERT was that for a vulnerability of this nature they need to respond with intention and details of fixing within 24 hours else I'm free to send one more email expressing intention to disclose vulnerability to public. Disclosure of vulnerability will not include how to exploit, proof of concepts, or any personally identifiable information.
3) if they say they need some time, and they say how much ( or I have to ask) I have to allow them that.
4) if things get ugly, CERT will take over upon my request
Yey. Thanks to all for the advice
In this case, you've sent them one email, and it sounds like they rolled out a partial fix in less than a week.
Why don't you wait and see how they respond to your second email?
Lots of people routinely publish vulnerabilities; anecdotally, if you do it the same way everyone else does, I think your risk is probably minimal.
* Have a calendar and stick to it. If it's 90 days from acknowledged contact, don't publish anything for 90 days.
* Be careful about upselling services (my advice: simply don't do it). If you're effectively breaking someone's terms of services by testing (spoiler: you probably are) and you "ask" for a service contract in return for doing something favorable (ie, not doing something unfavorable) with the results of that testing, you're being coercive. Doing something unlawful to coerce someone into giving you something of value is extortion. Don't extort people.
* Be extremely careful testing other people's sites. The short answer to "is it lawful to test someone's site" is, "probably not". If they've posted a bug bounty or a list of thank-yous to researchers, you can reasonably infer that they're allowing remote testing --- but if your testing crashes their site or compromises user data, all bets are off.
* Do not under any circumstances post actual user information, sanitized or otherwise.
* Do not post exploit code, or information that makes exploitation trivial. If the world doesn't believe you about the severity of your finding, get better at gauging severity, or become a better writer.
If it were me, I'd probably sketch out a policy as follows:
* A calendar and set of escalations for confirmation of a finding --- first contact in order to find a safe way to relay the finding, escalating to public (Twitter) requests for someone to relay the finding to (maybe 2-3 business days later), escalating to simply sending the finding to public support addresses (maybe a week later). With no acknowledgement of a finding after, like, a month, I might escalate to posting the name of the company and a SHA2 hash of the finding, repeatedly confirming the finding every other week or so, and then maybe a month later more details on what the finding enables (the "Phone numbers. Names. Location." thing you wrote here, I would not write for a long time.)
* Once the finding is confirmed, a simple schedule for public announcement. Maybe 30-90 days, depending, on generating a patch, and then N days after than for an announcement on my blog or whatever. If we're doing a coordinated announcement where you send a bulletin that credits me and agrees with my assessment of the finding, maybe I'll give you an extra 30 days after the patch if you want it. If I'm the only one who announces, maybe I'm announcing 5 days after the patch. Things like that.
The important things are:
1. Write a policy and stick to it.
2. Get the vulnerability confirmed before you announce it.
3. Negotiate with the vendor to minimize harm.
Again: be especially careful when you're testing someone's servers. The law is generally pretty supportive of testing software you personally install, but not at all supportive of you testing software on other people's machines.
If the answer is no to both, it's not that dire and they can be given 3 more weeks, precipitate action would not seem to be required.
As for deadlines, experience shows they are so frequently required that you will need to set one; there's a lot that's been written about this so I'd look for that.
Actually, I'm pretty sure some of this still happens today, in particular I remember noticing on Vista/Win7 that Explorer sometimes doesn't immediately refresh the folder contents when there's a new file created by external application (e.g. a log file), and refresh/F5 is useful to get this file visible immediately.
Funny thing, per the phenomenon of operant conditioning, over the years of using Windows I learned to regularly refresh Explorer windows via F5 to ensure I always see what's really there, sometimes just for my own peace of mind.
For example, if you open a network share, delete a file using another machine that file might take between several seconds to a minute to disappear visually (although if you try to use the file you'll get an error and it will refresh removing it). You can alternatively use the refresh button to get an updated view instantly.
It is mostly useful with non-standard virtual file system services rather than the normal NTFS/FAT32 file systems Windows uses.
I assume that feature is gone now - but presumably you can still put files on the desktop, so presumably there's a refresh button in case you have some strange configuration like your desktop folder mounted from a network share.
If you dig the details, behind the scenes an API called ReadDirectoryChangesW is called, which uses a notification-like system to report changes within a directory. However, that API is weird, so various types of changes are not correctly reported and explorer.exe is stuck with outdated data. The refresh forces it to update the view.
Disclaimer: I've had to use that API recently to code a simple python file monitor in Windows. https://github.com/gusmd/vigil.py in case anyone is interested.
You can donate money to monks who are studying, with the intent to benefit all beings. Even just engendering those thoughts has great benefit.
Check out those threads and start digging. Patio11 is a good person to read up on.
That X can be anything. Things like Wordpress or Joomla, or product companies like SAP, MS CRM, verticals like finance/banking or energy, or even your own open source project on GitHub.
Bristol, Oxford, Cardiff and Swansea in the UK are all in good positions to get to the coast. 2/3 hrs and lest than 1 hr respectively and decent chance of work.
If you have a chance of remote work consider Morocco!
I'm not sure what you want to achieve but in general the real world is not that strict. You are stuffing your ambitions into a tiny box and for no good reason. I would advice you figure out where you want to be in the next 20 years. This will give you a far larger scope for your thoughts.
Old people are not junk, if they keep their mental and physical faculties.
Referring to people who aren't knowledgeable about a subject as 'tech-handicap' rules you out as a potential evangelist in my opinion. You need to be an expert, you need to be passionate about a product, but most of all you need to be a nice person who doesn't look down on people who know less than you.
As with any role, the best way to demonstrate your worth is to develop a portfolio. Give talks at every meetup you can. Make sure they're video'd - watch them back and learn from your mistakes.
Get a name for yourself on StackOverflow (or whatever) as someone who can clearly and concisely explain a solution.
Write dozens of blog posts - and get them syndicated - showing how you can write tutorials, answer questions, and explain moderately difficult concepts to a lay audience.
Learn how to organise events. Start your own meetups / hackdays / whatever. Organising venues, catering, invites, sponsors, speakers, schwag etc is absolutely invaluable experience. Join the organising committee of your local events.
Finally, find a company (preferably with some funding) who you can see needs to get their message out there. Write up your plan on how you would help them succeed. Which meetups are they best to sponsor? Which merchandise has the best response among developers? What parts of their proposition need the most explaining. Pitch your experience.
A word of warning. I quit the evangelist game because I couldn't cope with frequent international travel. It's fun at first - but can play havoc with your personal relationships.
Two years is not long enough to become regarded as an expert at anything. You are potentially shutting yourself off from much with this attitude. I think many people have this fear of "never going to be as good as the others", but here's the thing -- many people think it, very few admit it, which makes it seem disproportionately scarier.
Stick with it. Learn from the 15 year olds until you beat them straight.
You shouldn't give yourself such a short timeline for achieving your career goals - The odds are severely against you.Capitalism isn't optimised for fairness; it's optimised for making as many people work for as long and as hard as possible (and this effect is only going to get worse with time).
Financial success is actually an oddity - A flaw in the system. It goes against what it's optimised to do.
Think of capitalism like the carrot dangling in front of the horse to keep the horse moving.
If you've learned to enjoy watching the carrot dangling and wiggling around aimlessly at the end of that stick, then you're getting the most value out of the system.
There's this guy who won the Abel prize in 2012 called Endre Szemeredi. He said that throughout his career he always felt himself slow compared to the other guys around him. He started to do maths at 22 as his parents wanted him to go to medical school - that he left and went do do manual labour in some factory. His professor though he'll never be able to become a proper mathematician.
- Read, a lot. Also form an opinion about what you read.
- Blog. Write about the stuff you think about. Voice your opinion and make sure you write some original stuff, don't write the same stuff all tech blogs are writing.
- Network, both on- and offline. Get to know people who are doing what you want to do and figure out how they got where you want to be. Stay in touch afterwards.
- Take a philosophy course. It'll help you to start thinking outside of the box.
Here's some things to think about:
- you do not need to be an expert - you can teach yourself to be an evangelist (probably the best way) - 22 is *young* (I have 10 years on you) - almost better if you know nothing as you learn from the ground up - you will learn everything you need to know along the way - possible to brute force your way into it via consistent hard work
Start a blog or youtube channel where you review products around an eco-system. Boom, you now run your own evangelist company, congratulations! Keep at this consistently for a few years. Focus your reviews on a specific type of company or series of product lines. You will get on people's radar. This will bring in job offers as you have proved yourself as an evangelist. A few things that I can think of off the top of my head re: the journey.
- pick an emerging tech eco-system (I chose devops) - something shiny and new (devops) - educate yourself about said eco-system - educate others about what you learned (brain dumps) - chunk these into small 1-2k word postings (blog or video) - was doing a weekly text/video release (hope to get back on a schedule) - it will be extremely painful in the beginning as you will suck (I did) - you will quickly become better and improve your craft - have a release cycle to keep you motivated with an end in sight - set clear goals for what each posting will be about - show examples (code, workflow, diagrams, etc) - weekly cycle will force you to keep things small and workable - just takes time and effort to research - it's easy to write simple brain dumps about what you learned - this could take years (it did in my case) - don't write crap postings or spam content - we are sick of corporate marketing/hype/vapor crap - an unpolished human-to-human conversation works very well! - show example use-cases (who, how, what, why, when, etc) - think unboxing video for tech products (what does the gui look like) - people will recognize you provide value - this will open doors beyond your wildest expectations - you will gradually become an expert - very rewarding to help people from around the world - can take over your life if you let it - force yourself to keep quality up over all else (don't be lazy) - you can do this alongside your day job - builds proof that you can be an evangelist - you will become much better at distilling concepts - this provides extreme value for time crunched people - you taught yourself how to learn & keep current!
Please note that I also don't know much C, but this implementation does work. Also included is a Postgres version of the Ref DB backend (so nothing hits the filesystem). There are a few bits that are not implemented since we didn't have use for the reflog and those parts are technically optional.
Would probably be good to get another set of eyes on this from someone much more familiar with C.
Hope this helps!
Are you looking for this to complete a $xxK client project? Or are you looking for this to help students understand a C implementation?
It makes a world of difference. If you are getting paid for the result, then you should share with the developer. If you are not, and doing this for the greater good, then it's fine.
We should really define the line here. There is enough exploitation in the dev world and the last thing we want is developers exploiting other developers.
It's also a great chance for someone who perhaps is looking for a gig to put some code up here that quite a few people will review.
Caveat Emptor: I did not test this since somehow the Debian package of libgit2-dev seems not to include the GIT_* constants. It should probably work, though.
I propose we use "Task HN:" and do these requests more frequently. We'll surely learn a lot, come to ingenious solutions, and maybe, just maybe, make our time on HN more productive. I, for one, want to at least see, if not help, what small but interesting byte-size hurdles others encounter and how others can solve it in different ways, and all the discussion around it.
Working on something together binds communities even tighter.
The demand for the highest quality code for what is essentially begging is also not becoming. Even contributing a terrible implementation would tickle people's motivation button (so they can teach someone without building your entire project, show they are measurable better than someone, etc)
"Beggars can't be choosers"
Here is a lib to match python's string functions in C++.
When working with string and vectors C++11 can actually be pretty straight forward, productive, and clear with no manual memory management. It definitely doesn't have as many string functions out of the box as modern scripting languages though.
As someone who's been at it for years, I'll just give you one little piece of advice. If you've already been through the fundamentals, you've done enough. Now, instead of focusing on learning technology, focus on building things, this is what real engineers do.
Let me explain. You'll probably get much better with at least one thing once you ship a real project to the end, and this is where you'll get better.
One of the best programmers I've ever worked with was a PHP guy when I met him, and he was good because he shipped efficient, tested, and working code fast, all while being able to document and communicate about it with his team. That's what being a programmer is. You won't become a good professional programmer by chasing after hip technologies (even though learning different paradigms always help), but by building things, and preferably with people, because this is how things work in the real world.
As long as you stay with startups and technology companies, you'll see that any CTO or lead dev worth his salt would rather hire a smart Perl programmer with strong fundamentals who shipped things over someone (maybe smart too) who knows a bit of JS, a bit of Java, and a bit of Haskell. This is, however, not true with a lot of non-tech companies, where keywords on resume, a professional-looking attitude, and some good sales skills will usually get you better positions.
It's never too late, don't fear irrelevance, build things, and have fun!
It's really all about focus. Learn one thing at once. Rinse and repeat, and come back to the topic later for more insight.
Don't be afraid to say "I don't get that (yet)." - for me it's a sign of quality in an engineer, if he realizes he doesn't grasp a concept yet.
All others are struggling too, even the best:
In the end, if you're not embarrased about the code you wrote half a year ago, it's a sign you're not progressing.
Both are true: there are simply too many subfields if you want to excel in all of them, for any particular subfield there are people who are much better than you are, because most of them have invested a lot of time to become an expert.
My first advise would be to get the basics right: many commonly-used algorithms and data structures haven't changed the last 20-50 years. If you know then inside-out, you know what to pick to solve a problem. Get a good book on Algorithms & Data Structures or follow a course or two.
My second advise would be to pick the area that interests you the most. Read the foundational books, follow the leaders in the field, and do projects (they are good practice and help you to build a portfolio). Put a strong filter on the stuff that irrelevant to your chosen area (only read the most interesting bits). You will find that you quickly change from novice to expert in your area.
When it comes to programming languages: it's fun and useful to know some languages. But in the end what you ship is more important. So, just pick a language that feels natural for solving the problem and don't get too distracted by armchair PL philosophers ;).
- I realised I was a mediocre programmer
- ... (I) find that my desire is driven by fear ...
The first is a good feeling :-) Too many programmers don't have this realisation. Embrace it!
The second is something that worries me slightly. All of the programmers that I know who are driven by fear let it chase them into failure. Getting the "joy of tinkering back" is what you need. Forget the "ever changing rules". Chase what you love and forget about the rest.
Now for some specific advice. You are at a level now where you need to integrate your knowledge, not learn bits and pieces. Stop everything else you are doing and start a major project that will occupy your time for the next year or so. It doesn't matter what it is, only that it is something you love. This will help you more than anything else.
Reason: I thought I wasn't a good developer. More I read HN, articles, stories, more I got anxious and left my job to pursue research degree. I figured out I lacked mathematical abilities to do research in the field I wanted to. I became depressed and I felt regret all the time.
After 7 months, I realized I was chasing the horizon. I have realized it's not the new things you learn or the awesome technologies you learn that matters. Things that matter are: Being good at what you do, whatever it be...some people spent life juggling balls. They aren't genius in maths, science etc. but they are awesome at what they do. It makes you feel wow !
Second, it's about being happy. If you are writing this post in HN then you belong to very privileged class of people in the world. Be thankful for what you have. Love your family, friends. That is what matters. It doesn't matter what technologies you learn when you turn 60-65. All that matters is the happy moments you have shared with your loved ones.
Third. Don't take what's written by founders or geniuses seriously. Read, acknowledge and move on. If you question yourself over what others are doing and learning, you will be in mental hospital soon. So take things easy.
Last month I took a job in a company. Technology wise it's crap. No process. But everything works there. People get things done. We laugh, chat and go home early. I go to gym after work and sleep well after I come back. I enjoy time with my wife on weekend and thank god for this life.
It doesn't mean I'm doing nothing. I have compiled a list of books I want to study. I have read 2 chapters and I started a small project for fun. These are the only two things I'll work on..but no rush....slowly. After all they are last things I have to worry about in my life. First things first - Enjoy life and be happy.
Lastly, watch this - https://www.youtube.com/watch?v=OCvAl2Vr7as
and See how happy and cheerful she is. She isn't scientist or math genius or a great programmer but she is awesome at what she does. Note her answers to questions.
Also, this http://www.bothsidesofthetable.com/2015/06/19/why-successful...
If that is your genuine concern, I'd suggest focussing on timeless topics. Two easy rule of thumbs: (1) if it's been around for a while and still relevant, it's probably going to stay that way (eg compilers/parsers, operating systems). (2) if it's hard and math-y, it has a good chance at staying power, even if new.
In any case, do what adyus said: pick one thing, and ship, ship, ship.
Some inspirational reading: Peter Norvig's "Teach Yourself Programming in Ten Years" (http://norvig.com/21-days.html), Richard Hamming's "You and Your Research" (https://www.cs.virginia.edu/~robins/YouAndYourResearch.html). Or if you are of a more entrepreneurial bend, P.T. Barnum's "The Art of Money Getting" (https://www.gutenberg.org/files/8581/8581-h/8581-h.htm)
Happy to talk in private. My email is in my profile.
(Some snark thrown in for free: forget about OOP design patterns.)
I've often found that if I tried to do something because I thought it would be good for my long term career prospects I just wasn't that motivated. However I often found myself circling back to the same technology or topic at a later date out of pure interest and was highly motivated then. Attitude toward what you're working on and your reason for doing it is almost everything.
Sounds like you're maybe feeling a little burnt out if I'm honest. It happens to all of us. Whenever it happens to me I either increase the frequency of my other hobbies I enjoy (water sports) or if its a particularly bad spell, try looking into some completely unrelated area of inquiry (for me that can be space, cartography, travel, electronics, brewing beer, etc - even learning a musical instrument). I find that it not only stimulates my mind again but ultimately I start to make new connections about how my existing software skills can be applied to this new area of interest. New project ideas start to flow... and off we go again.
My eyes are bigger than my stomach. I believe that these days it's probably impossible for anyone to really understand everything.
Personally, I think PHP is a fine language when coded well (most of my PHP looks like my Java, though I haven't coded much PHP since just before the introduction of lambdas). I feel like it undeservedly gets a bad rap, perhaps because it's so easy to write horrible code in it. But that is just evidence of its complete accessibility in my books. I think that some of the coworkers I had at my PHP jobs would agree that it is an adequate tool for the job of web development (some people even use it for other purposes, but that's not my style).
I wish I could give you some solid advice, but I don't feel qualified to do so. I will say, however, my favorite experiences in programming have always been upon completion of a project -- seeing it go live, get real users, and actually work, from start to finish. Most of those times have been in my professional career where I was paid to complete something and had a hard deadline (that has nearly always slipped), but a few have been school assignments and personal or open-source projects that have 0 or nearly 0 users. Sometimes solving a problem or scratching an itch is just the thing I need.
Also, in nearly every case where I've shipped production code, I look back on it fondly some years later (especially if it is still running and getting used) and think, "damn, I must have done an incredible job. I got everything just right." But on the rare occasions where I get to look back at the source code, it's always got plenty of TODOs lying around, and things I wanted to fix, stuff I would do if I had a bit more time but just never got to, etc. It's never perfect... but sometimes it still works. Memory is a funny thing.
Finally, someone linked this on a vaguely similar thread recently: https://www.physics.ohio-state.edu/~kilcup/262/feynman.html - I thought it was great.
Here's that thread, BTW, which you may also enjoy: https://news.ycombinator.com/item?id=9796203 -- some really quality responses on there, IMO.
An airplane pilot once told me that when young airplane pilots experience turbulence, their reaction is to speed up to get through it faster. That makes the turbulence worse. An experienced pilot will slow down because it reduces turbulence and makes the trip enjoyable again.
Edited for clarity.
1. It's always changing
2. Feel confident in that something that you learn will become relevant again
3. You can't know everything
In addition, find a team that will help you learn and practice everything you are interested in. Look for a company/team where individual engineers have to wear many hats.
Your fear of becoming outdated is well founded. Well all become outdated. Thats why every five years or so we learn a new language. Thats the fate of the IT industry, things change and sometimes they change too fast. We learn to adapt. But once you learn a language pretty well youll realize that there are commonalities between them all. Learning a new one is a matter of weeks. So stop worrying too much.
My last advice would be to choose a project and focus on it for the next two to three months. Stop reading and start implementing. Thats probably the hardest part. But it will help you get in grips with the language of your choice and feel more comfortable and self-confident. And it will also help you realize the path you wish to follow.
The question that I keep coming back to is whether I am doing the things that I find interesting and engaging. The answer is an absolute YES. However, if I need to do something else where I would need to learn some other language, or technology, so be it. It is all part of the process.
My advice is to slow down, and focus on your interest and passion.
In my 2nd year, I was selling website templates and earning good money. It required little knowledge of html, css, and js.It was good. But soon saturated my hunger.I read up on solving problems, from a development perspective.It's a lazy man's job but a brainstorming one.
Solving problems gave me direction.I proceeded to learn different languages for different tasks that were required. I read about implementing backend in django, ruby on rails, node.js and php.
In late 2nd year, I decided to work in a team, and solve problems as a team. I took the job on CTO, for various startups in college. Each startup would present a different problem.
Instead of learning it all. My direction became problem centric. Sure, most of my startups failed, I was working with resourceless people in college. And had to always be the one to start everything from ground-up.
Investing my time in too many startups, too many problems, too many languages ... hung me up on my degree. :P
Sure, you'll meet people who have a mindset that they'll get you to make the product and then ditch you. But I never cared about it. :P Don't feel bad.The world will always be like that. I got what i signed up for. :)
I am now a full stack developer by choice, I design my products, create apps and I have functional knowledge of most of the awesome frameworks.My journey made me work with deployment, asset management, managing servers, deploying hybrid apps, scrape data, building performant and consistent apis.
It was a hard time. I will get my degree this autumn. Look at the bright side.
People always get happy when you can turn their idea into product in <15 days. :)Just solve problems and youll emerge as a magician. :DAll the best !
But the main focus should be to get something working.
I think it boils down to weither you keep track of all your projects (what's to be done next), that you do not try to plan ahead too much and that you do not plan too many tasks for a single day. If you stick to these guidelines there is a high probability that you get a good experience ("did that, finished that") every now and then which keeps you going.
Same for some of us. In my case, I'm busy building too many side-projects, and I do it just for the sake of learning new stuff, I have a lot of fun and it works!
With 5 years you're just starting. You need to pick an idea related with 3 or 4 fields you want to learn (Data Science, DevOps, etc) and build it. For example: An app that analyses tweets from a twitter stream in real-time and applies predictive analysis for certain (or funny) topics. You can use docker containers and setup a CI server yourself.
It must be an idea that excites you. Build it from a paper sketch, to a MVC app, to CI server. You'll learn along the way, bit by bit, don't rush things...
This is very effective for learning, and there's also something special seeing your small (or big) ideas come to life. You'll get an enormous satisfaction...
I find it overwhelming at times. But I think uniclaude said it best, you just need to jump into it and make something, build something and don't be afraid to write shit code. Afterwards you can step back and have a look at what new knowledge you've just acquired and begin to fine-tune any rough edges if it still interests you.
TLDR: Don't worry or feel the need to know everything. Pick what you love and enjoy working in and focus on that.
I browse HN and read comments and articles I do not even begin to understand, and it's hard not to feel rapidly inferior. But you don't have to be a genius to make a difference, and you don't have to be a genius to be happy.
I make my living off the back of PHP. Sure it's got a bad rep, but it's hard to knock something that keeps a roof over my kid's heads and their bellies full.
If you want to learn because of genuine interest - do one thing at a time. Let your curiosity guide you. And good luck!
I am extra full of things running in parallel so no good teacher here! But I can share my experience: what made me step up from random to mediocre programmer were the test classes, because finally stuff was making sense: the test class is the theorem, my code is the demonstration, I could work with that. You have to find your ways to make cool things work efficiently and reliably.
Watch ancient code of you in PHP and after all you learned, read it again. Was it really that bad code? I always thought the same like you did, but when i read old code... I sometimes think it's beautifull ( can't explain it otherwhise)
Learning other programming languages helps you understand architecture and programming concepts, that you can probably implement in your "old" programming language. Not learning them, doesn't mean you're a bad programmer, perhaps just a lazy one :P
You can always find specialists later. If you know a bit of everything, you can set up your solution by yourself. Maybe it won't be perfect. Maybe it will have to call someone's API that's too expensive, but later your specialist will rewrite that code, for example.
I experience the same anxiety - I have a divergent way of thinking about things and tend to get interested in lots of different things at once rather than one thing in depth. Sometimes its good - I can think of different approaches to problems, for example. It seems like it makes it difficult to learn new skills to the point where they would be useful/worth anything to prospective employers, however.
My current strategy to address this is pretty simple: choose one thing at a time. To echo uniclaude's comment as well, it helps to build things - don't read about 10 different ways to do linear regression, choose one and try to make it work. I would also add that its fun to work with other people, and it can help you stay focussed. Obviously there are a million ways to contact people who you can work with on the internet, but I have been using meetup.com to find groups of people who share my interests. going to hacks, workshops, presentations and even having general discussions with people around one topic can make the learning process more engaging and you get the added benefit of being able to draw on other people's expertise and experience.
As to skills, and topics and work, just focus on doing things that you love and repeat. Because you will end up doing them anyway. The rest will follow.
I think the desire to learn many things at once is something most of us would share. But be careful that it might also sprout from a fear of somehow "missing the game". Trust that you are not "missing out" anything. Don't buy too much into competition (which is again actually something about people). You may try just getting an overall idea of the things you are curious about, but still stick doing what you love. Because if a topic is important enough, it will show up again anyway, which is when you will know for sure that "it's the actual time" to learn that topic in depth.
Love people, love work.
Languages are so simple to pick up these days: stackoverflow, teamtreehouse, git, etc. Latch onto a fun project with a fun mission, learn languages on the fly, and finish it. In a book, you wont learn how to debug that broken ruby gem. This will guide you in the right direction as well, it will force you to pickup pragmatic practices. [As opposed to sitting in the break room debating abstract factory patterns vs factory pattens]. After 13 years of coding, I just code on projects I enjoy now. I have to learn Go? Meh. Whatever. As a side note on php (my true love), I encourage the hate - it helps my pay.
Java? Not until it gets the basic web functions, http://stackoverflow.com/questions/832620/stripping-html-tag...
This needs to change. What's helped me a lot in recent years is to focus on finishing projects. I don't even care what the project is as long as I finish it before starting a new one. That is my desire now.
tldr;Instead of pure "learning-driven" activities, tackle side projects. You'll cover a smaller problem space but learn it much better and have something to show at the end. Copy something that already exists, build it from scratch with few to no dependencies, possibly make it better in one single dimension.
Actual examples Marc built that changed his career: Mongrel clone in under 500 lines of codeAnt clone in under 400 lines of code
Btw, the problem you outlined makes a very good answer to the question that is often asked in interviews -- "what's your greatest weakness". Not having deep expertise in anything is not so good, it's a weakness indeed. But excitement about many things and broad experience make up for it.
I balance these based on the things I would like to do in the future. I become and learn what I would like be and try to find a job where I can use those new skills.
We'll figure it out, like our fathers before us.
1 - What has helped me is to categorize my insterests. Sure, they're connected in my brain and it's not like x is disconnected with y, we can always find a connection.. but I needed to separate them into categories to be able to manage them more easily because I don't need to tell you the state of the brain if you dump all of them in the one and only category most of us have which is labelled "Interesting" since we find every darn thing interesting.
Here's what I did:
I separated things into "Pillars". The way I think about them are Ministeries (I needed a really bureaucratic rigid structure to balance out the clustermess the brain is): Engineering, Business, Lifestyle, and Self Improvement.
Doing this alone has allowed to be conscious that I'm neglecting this category or that one, because now they have a name and I can measure stuff. Before, everything was just "Interesting" and it's not really easy to track down since they all blended together in a homogenous whole. It's like being in a bath and you're not really aware of when the water became cold. Tagging avoids that problem.
Compute how many hours you can dedicate for the whole stuff per week. There was a time I studied for 16 hours a day but it's not really the best course. It depends on your situation (work, etc). Most people say they don't have time but they really have a lot of time. A lot would spend hours on Facebook, then hours watching TV, and then complain and describe themselves as if they're not the "sitting facing a computer person". Most are on a 5 hours minimum wasted per day diet.
Each of those "Ministeries" gets a chunk of that time as a weekly budget. And this budget gets divided between the "Departments" making up that Ministery (say Engineering has Control Theory, Programming, Signal Processing, etc. Each one gets its weekly ration)
So imagine 40 hour per week for the whole 4 Ministeries. Say Engineering gets 20. From those 20, Control gets 5 hours per week, etc..
Thinking in weeks was important because there's only so much stuff you can fit in a day, and if you think in days, you wouldn't be able to see the whole picture, which is: Making sure you touch each of your areas of interests on a regular basis.
I'm sure you spent so much time on something really interesting, only to find that you completely forgot another thing that's really interesting on which you've spent a tremendous amount of time and of which you now recall nothing. Right? Sounds familiar? The feeling of the wasted time and still barely remembering a thing can make you punch walls.
So, instead of doing the same stuff for whole weeks or months.. You do many things that you visit several times a week. This sort of refreshes your cache with a high enough rate that you don't neglect a topic, but low enough for other things to be touched, too. In other words, you don't touch TOPIC 1 every single day, but even if you touch it every other day, the switching is fast enough you have the impression you're doing it every day.
This doesn't work if you have very few areas of interest, but works wonders if you have many. This is also why a week goes by "really fast", and why some people feel it's long (because they're not doing much. Some people actually do get bored).
Finally, limit things.
Not the amount of things you're interested in (although that helps.. But limit resources. I was interested in Python and was wondering which book was good, and where to start.. 4 years would pass. If I had read 10 pages per day of any book while I was trying to decide, I would've been much better at it right now.
This is where you have to be narrow-minded.. Want to learn Calculus? That one is tricky since most books suck and aren't my style, but pick one book and go through it. Even at 10 pages a day, 3650 pages per year. That's 6 books in a year on Calculus.. I'd bet anything that you'd be at the very least better than if you were still deciding which one to read.
Hope this helps (I struggled a lot and still have to pay attention to that).
A Google Glass like device without most of the functionality (no camera or mics) or processing hardware (doesn't have to run its own OS), except the display (this should cut down costs quite a bit and make it a bit more feasible to manufacturer and purchase than Google Glass itself).
You connect devices to it using Miracast and/or some other wireless display tech and extend/mirror your smartphone/laptop displays.
It can serve as a portable multi-monitor setup for productivity, or a simple portable heads-up display for entertainment (video playback, reading) or utility uses (navigation).
That'd be the MVP anyways. In future revisions you can maybe add things like a mic and/or camera for things like augmented reality and voice control, but figure out how to offload the processing to the master device (laptop/smartphone) rather than dedicating hardware to it on the device itself for affordability and battery life.
Of course, these are encrypted and only decrypted (transcrypted?) when they're transferred to someone nearby, intelligently based on `tracepath` or something. My thought (may or may not be feasible) was that the central server only gives you the public key for the data, and then provides the private key and a new public key when the data is transmitted. I'm not sure that's even possible with any level of secrecy, but if so it would remove a lot of redundant traffic and I imagine you could pay people less than you'd save on bandwidth/peering if you could just pay them to P2P content (securely).
Get theaters involved in the initial distribution since they're everywhere and have digital copies (and probably decent pipes).
Basically, my internet got really crappy every day at about 6 PM and I imagined that 90% of my neighbors were streaming the same episodes of Breaking Bad, and it bugged me that it wasn't just sent once and the distributed locally.
Mission: To measure and honor the value of every individual.
Vision: Corporations and Individuals providing value directly for each other.
Product: A URL shortening service for individuals to monetize the content they share. Monetization occurs via an ad featured between the platform sharing the short url (e.g. Facebook) and the site the short url takes the user to (the content being shared).
2) A dribble-like site for artisans. A site to showcase and upvote artisan work and hopefully drive business to them. Baked goods, building airplanes, cedar strip canoe building, kinetic sculptures, etc.
I play soccer recreationally. I've easily played more than 1,000 games and all I have post-game are memories ( which are nice ), but I feel we could do much better.
I have a vague idea for a solution - but it would involve drone-filming all my recreational soccer games, and then have the content edited/produced - so I could see al my plays, everyone else's best plays, and so on and so forth.
It would be really interesting because it would also augment the social in-pitch experience with post-game online socialization.
What do you think?
Niche market for graphic designers.
There's the website What The Font , but it's not a super user friendly app like Shazam.
I think the hardest part of this would be the huge amount of time it'd take to get a good dataset and train whatever machine learning model you'd probably wind up using.
The next odd idea requires expert knowledge in Babylonian contracts. Every change of ownership without a contract was theft. Contracts involving people required a cancel clause for each side. And ownership on people without contract was punished by death, as illegal slavery. So most contracts are marriages. The contracts are highly formalized, so one can use them as templates and exchange the names. Print them on a clay tablet, burn them, and send them by mail. I'm sure marriage contracts would sell, especially those with the cancel clause: "and when she says you are no longer my man, he can throw her into the river".
The 3rd and most challenging idea would be a project and freelancer site that does not suck. Where projects, prices and skills do not race to the bottom.
And last shameless plug about something real You can contact me on #o3db @ irc.freenode.net - currently developing a Browser-4GL in Scheme.
2. building your own store curated from your favorite brands only. Every user gets discount on their fav brand and there is a limit to number of brands
3. Hire a local "expert" to build your itinerary when you are visiting that local's town/city.
4. An new email platform built with UI in mind for non-personal emails like newsletters, marketing offers, etc.
happy to work with or share more.
- Startup: xprize meets kickstarter. Or a reverse-kickstarter. You create and back the project first, and then anyone can execute it and collect the reward. People come up with projects they want to see happen, submit the idea. Anyone can vote on the idea by sending some money. As a result you have a list of user-created project ideas, ranked by how much money people deposited on them. Anyone who completes a project gets all the money.
- Project: A convenient website where users can add feature ideas, vote on them, and discuss implementatuon. It would be a convenient way for developers to prioritize which tasks to work on. Probably connected to git. Basically like submitting issues, but it's feature ideas and it's ranked by importance.
- In-browser markdown editor like on gitbook.com. Please somebody make this. Ideally it would be open source, but I would totally pay for an opportunity to use it on my website.
- slant.co, but for things other than tech. Movies, books, music, whatever. Or a similar open-source system so that I could spin up my own website with this.
- Awesome open source chat that I can embed on my website. Like chapp.is or gitter.im
- ELI5 for computer science and programming. Explain linear regression, ANN, and other complicated concepts in short, simple terms.
-A robot simulator programming game where you control a virtual robot with your code. Targeted to CS and AI students. You could use this game to practice algorithms you are learning. Challenges(levels) are somewhat similar to AIMA exercises, or can be taken from berkeley AI class curriculum. Later you add a "competition" feature, where several teams program their robots to fight each other. Check out Screeps and Starcraft AI Tournament for inspiration.(the whole game is in the browser, robots are controlled with REST API so you could use any language.)
Send me an email to firstname.lastname@example.org if you are interested in working on any of these. I know Django, I can contribute, especially if it's open source.
edit: my search query was just "rent anything"
2) contraining particles by the area/volume
3) creating 'areas' that create and destroy particles based off forces effecting it and whether or not the two lines connecting two particles are parallel
2) It would be really cool to get the 'magic' of the command line into the hands of everyday people that don't even know what it is. Magic sort of does with with SMS. I'd love to see an app toy that you totally interact with by emailing it. Then you could email it for all sorts of automated things -- :bcc the app to log data, send it an email for reminders, simple commands could be parsed and understood. It wouldn't have to do a bunch of NLP at first, you could be strict about how the data needs to be formatted for it to work.
3) This one is nebulous, but I think software discovery for the enterprise is really broken right now. There is still WAY too much outbound phone sales and old fashion 'network' selling going on. There should be some place I could go as, say, a sales ops manager to check out the best software eating the uses cases for sales operations (Ambition, BaseCRM, Yesware, etc etc). Maybe it's product hunt style group voting. Maybe it's a curated, impartial look into the 'stacks' of the industry companies that are considered 'best in class'. Maybe it's something looking at Google trend data and finding 'momentum' sort of like Mattermark. Maybe it's a 'pagerank' style connection map by looking at VC investors and the 'client' pages of startups. I dunno the best way to get good information that scales and nimbly identifies new ideas when they emerge, but if you figured out that problem you'd be solving a huge, very real problem and be in the middle of what will be billions of dollars in $ shifting around in the next 10-20 years. Search like Google works when you already know what you want, but it's really hard to distinguish the signal and noise with all the new tech and tools and toys emerging to take over different use cases for large companies. And the people in the large companies that need to know this information often don't have enough time to do the research or even where to begin.
Please. I'm begging you to take my money.
I don't mean as a hobby. Industrial scale, genetically modifying the almond trees for better indoor results.
Global demand for almonds will continue to vastly outstrip what California can handle via traditional outdoor growing. That would have likely happened even without the drought. The water requirements will place a cap on the almond industry's growth. The solution is drastically more efficient indoor growing.
I've hired >50 engineer in the last 12-18 months. They are experienced hires I will grant you, but education is something I barely look at on a resume. In fact, I can't even tell you how many are self taught vs not, but I suspect it's 30%+.
It's a little different for junior engineers, as it can make a difference, but in my experience the only thing you can ask for from any engineer, which is especially true for junior engineers, is: attitude and aptitude.
For example, if hiring someone with a CS/MIS/CIS degree with 4 years experience. We'd accept 8 years experience in lieu of a degree.
If you find learning in college boring, what do you think this field holds for you? You have a world full of knowledge you could be learning if you're bored, no professor is preventing you from becoming knowledgeable across many programming disciplines.
It seems you don't even have a rudimentary idea of what goes into building software yet, you just want to skip ahead to the getting paid part.
If you can't build your project/idea already, why would someone pay you to work?
Keep learning, you've got a very long way to go. Good luck!
Currently, I'm in process of interviewing with London Office of Facebook. They told me that they don't care about my degree. The only important thing is my skills. Also, I had conversation with Google HR, he told me the same. Ripple Labs has very advanced position for C++ developer and they don't care about your degree at all.
But I found that average tech companies care much more about degree than Google and Facebook.
So answer to your question:
Yes, top-tier employers in tech industry don't care about degree. But in order to get there you have to gain your first experience in average companies and it will be harder than with degree (but it's not impossible).
Degree is very important to getting work permit in USA (H1B visa), Canada and many other western countries.
I got my work permit in Sweden without any degree, but salaries here are low.
If you dream about California, you have to get your degree even if it's super boring.
Learning C++ course on college may not do much to enhancing your problem solving capabilities in programming because when the classes are not fun itself (as you mentioned), I can assure you that you will not learn much but detest the programming classes itself and I regret to tell you this but you may end up renouncing programming itself, which you just said you want a job in. Albert Einstein said that after a year or more of mind-numbing classes in highschool that did nothing to excite his creative potential, he found that the same scientific concepts that fascinated him in the past felt utterly distasteful for almost a year when he entered college.
Finally, after reading half of the Internet's how-to on "how to code" and "how to be a skilled programmer", one answer was always common in all of them:
- THINK OF AN IDEA AND WORK ON IT.
They mention that if you don't have a purpose to learn to code, you shouldn't learn to code at all. So, let me link to eye-opening articles that debunk the myths of programming I found in this thread: https://news.ycombinator.com/item?id=9823985.
- http://fourhourworkweek.com/2013/11/03/productivity-hacks/- http://blog.codinghorror.com/please-dont-learn-to-code/- http://norvig.com/21-days.html- http://www.invokemedia.com/wp-content/uploads/2013/06/venndi...
When you build apps or websites that do something you wanted, only then you gain the confidence and skill to work for others on their projects, isn't it? And that time will come when you will be overwhelmed by the number of jobs you can apply to. So, "no skill, no job". :-)
Do startups accept self-taught programmers - definitely yes.
Do companies in general accept self-taught programmers - yes.
Do large fortune 500 companies accept self-taught programmers - generally no.
There are exceptions to this rule. If you're self-taught and have done something amazing, like created your own programming language used by thousands of programmers, or you've got years of experience in some area thats hard to find experts in, like realtime systems programming then they'll make exceptions and you can get in.
If you want to work in R&D you're going to need a PHD, the only exception here might be in startups.
But aside from the big players, you can almost always substitute experience over education. Given two programmers, one with 3-4 years experience and the other with a bachelors degree and no experience, its actually the case that exp will trump education just about every time, especially on general programming positions and in the startup community, where all that matters is what you can do and have already done.
Overall though, do yourself a favor and finish up your degree, you'll always have the advantage over candidates that don't have one.
Long answer: The long-term trend has been that it's becoming harder and harder to get by without a degree. It's just supply and demand in action. A long time ago, people with programming skills were hard to find, and companies had to settle for hiring whoever they could find.
But people with programming skills are becoming increasingly common nowadays. Supply is starting to catch up with demand. That's making it harder to find a job that doesn't require a college degree than it used to be. Now companies start having an incentive to add a degree requirement just to reduce the number of applicants they have to consider.
Even if there is not a degree requirement, it's only going to get more common that you find yourself competing directly with people who are similar to you in every way except that they have a degree and you don't. When that happens, they're likely to pick the person with the degree. It's just the safer option from their end.
I hated general college classes that weren't related to programming and sitting in rooms where after a semester people still didn't know how to add a image to a webpage. Now I've learned so much working 50 hours a week getting challenged left and right by so many real life issues.
There are plenty of jobs open to self tought programmers around me they simply want you to master your language and stack whatever that may be and my problem was trying to be a jack of all trades like trying to learn Ruby 3 days before a interview.
5,308 jobs postedhttp://www.indeed.com/jobs?q=%22in+lieu+of+degree%22&l=
Spend some time working on your idea outside your studies. If you are already in college, you've already made a huge investment. Take advantage of the resources (including professors) and the network you have available to you during this time.
Do extra work, especially if you don't currently have a job or are raising a family right now. So many people piddle away this time and skip through college as if it doesn't cost thousands of dollars a semester (even if you didn't pay it, someone had to), or if it's some magical job-providing mechanism.
Get back to your studies and start your projects!
I think every programmer is self taught to a certain degree. You learn very little in tertiary education when compared to working 40+ hours a week as a programmer - in my opinion of course.
I learn by doing things, whereas others learn better in different ways.
What matters most is to show competence. If you can make someone interested in some things that you've built, you can probably make do without a degree, but you'll have a tougher time getting through the door.
My two cents is try to stick with your formation, while you build yourself something impressive. Chances are you'll pick up something useful and the social network of peers will help you at least as much as the formation itself.
Best of luck whatever you choose!
Programming was my biggest interest since I was a child. So started with Basic, then moved to ASP 3.0, then C, then web programming with PHP and now, at the age of 32, I am still working as a full stack developer and getting paid well.
The hardest part of self-education is to learn best practices and how to do things on a large scale. So learning the syntax is easy but getting the principal and methodologies will take some time and practice.
Now I'm a web developer and after having worked in one of the most interesting design studios in my country I'm pretty sure my previous choices helped a lot broaden my horizons.
But I wouldn't suggest you to quit college and seek for a sw developer job. In most cases those (usually talented) developers have knowledge gap when it comes to algorithms, data structure or deep understanding of the HW / OS. Thus, you might be able to find a job right now, but in time you will need to catchup or you will have hard time to compete other developers with formal education.
Interviewed a few self-taught programmers. Some kind of test task and an interview says more about candidate than line with degree in resume.
Answer to your Question - "It depends".
A question to your question - Can you make company feel stupid enough to even think about a college degree?
A little bit longer answer:I'm from Germnay, I've studied architecture but I've decided last year I want to make my hobby my job, and I've applied for a few jobs and got some offers. On a sidenote our (sofware) architect did never finish school.
But I have a huge knowledge gap compared to my coworkes who have studied CS. I personally feel inferior to them. So I'm going back to university to study CS. I would suggest you shouldn't drop out.
I don't like or agree with any of the above, but that's how most of the world works. Put in the time, get it done. 10 years from now you will be very happy you did.
Studying is still very important and valued by a lot of companies. I'd recommend to study in something else "complimentary" that passionate you and learn/improve in software engineering outside school to have a more diversified skillset. That's what I did 4 years ago, landed my first software engineer job and now had the opportunity to move to London because of that!
Since you're bored get some experience while in college and that will help out immensely, also the most important language to know is English, from your writing I'd really recommend brushing up.
Lots of sites like elance / remote programming jobs to find freelance work, don't burden your studies with the pressure of a full time gig.
Despite the passion and emotion about what is appropriate for StackOverflow, the debate isn't about links to free downloads of PhotoShop or cracking commercial Wordpress themes because people who are interested in that sort of thing go elsewhere. Likewise, nobody on HN complains when such links are killed upon posting here.
The solution isn't in mechanism, it's in policy at the highest level of abstraction; that of "What this site is about."
You may argue it is full-body nudity, depictions of erections, exposed female genitals or breasts... but then someone will produce some art that everyone accepts really is art and shouldn't be censored, or a photo of breast-feeding. And so you make an exception as you do not wish to censor.
Then what differentiates the porn from the art? Is it simply the context of where it appears... a porn site or a gallery? What is the context of your site?
I'm arguing here that everything is subjective when it's not obviously illegal (against the letter of a law).
Law itself struggles with these definitions and tends to rely on the concept of what a jury or judge "reasonably" determines to be against some wording of a law.
The underlying key question in determining a moderation policy is whether you, the site owner, wishes to take on the decision making for those subjective cases. And, in doing so, whether you wish to accept the liability that comes with it.
Simply: Are you willing to be liable for the content posted by third parties?
If yes, then you need to have the equivalent of editorial processes, clear definitions you can communicate to users, declared processes for handling breaches of those definitions (and repeated breaches).
If no, then you can have the equivalent of "mere conduit" or "safe harbor". Anything you're unaware of you can't be liable for, and once you're made aware you need to handle it with whatever declared process you have.
Reddit and others were the latter.
And the latter works fine until you start moving towards advertising and those paying for advertising start to say "You cannot show our brand next to this (or that) type of content". Suddenly you need to know what content is where and your ability to deny knowledge of what is on the site is reduced and you have been pushed down the path, and probably taken the first steps, towards a more editorial process.
Trying to encapsulate processes in a set of rules, as you've done in the Ask HN, will fail if the rules themselves are against the nature of the site. The nature of a site that survives on advertising is that the processes and user terms and conditions need to create content acceptable and favourable to advertisers.
For most of what you've outlined above, I've had lawyers create terms and conditions for sites I run that does encapsulate a distributed and hands-off moderation policy that complies with European law. You can see those docs over here: https://github.com/microcosm-cc/legal
As well, ideas that are serious and challenging require the reader to make a great, intentional effort to understand them. Rationalization mechanisms will always find ways to avoid understanding otherwise. A narrow band of "interesting" is allowed, but not something which triggers defensiveness.
Thus, the optimal way to teach the reader is to find a way for them to engage in play with the idea and solve a mystery that unlocks the real information, creating the intentional effort without waking up the rationalization guards.
Conspiracy theories act as the foil to "mainstream" propaganda by presenting a story which is just fractionally harder to follow, but not tremendously so; the initial reader effort is basically one of "what if They are lying to me?" Subsequently the reader is showered with evidence that yes, they are being lied to. This point and counter-point effort allows people to remain anchored in a binary, yes-or-no, right-or-wrong framing of events and actions, where their identity and opinions can remain stable and confident.
There is an inevitability that a popular medium will hew close to surface dualism. Anything that achieves more in that realm hides something of itself.
Another way to think about it is that understanding is concentric - the group in the innermost circle can't directly speak to the folks far in the outside. They have to teach the people they're adjacent to, first. In the process the understanding may become a little more basic and limited, but still more "correct" to the expert's understanding.
1) Devil's advocate - This would be the worst it can do
2) Speak the opinions people would rather hide - This would be the best it can do
3) Break Down pros and cons of equal two sided debates - I'm a big believer in give people as much information as possible to make decisions
Maybe more. Conspiracy enters into hidden opinions however, if we are talking about the "tenth man rule" then I doubt leaking private information would be this newspaper's bread and butter.
Honestly, I skim through things to try to get to the meat of materials. So if you provide information that was easy to sort through, about current and heated topics and attempt to hit every angle with logical arguments, I would read it.
There would certainly be an audience for such a publication, though whether you'd want to pander to it is another question...
Also, you should do it as a website rather than a print newspaper.
There already are several "conspiracy theory" websites.
As long as the people that make the paper are on the premise that the facts gathered and presented are verifiable (in principle) by anyone, there is little danger.
2.0 If your goal is a greater benefit than the other founders, then:
2.1 The system is based on a finite pie model.
2.2 The process is inherently adversarial.
2.3 The goal is very short term.
3.0 If the concern is over distributing profits to founders rather than reinvesting net revenue into growing the value of the founders' equity then the enterprise is not a startup in the "Silicon Valley Sense".
3.1 It's more of a Lifestyle Business
3.1.1 There is nothing wrong with that.
3.2 Startups in the Silicon Valley sense are organized around creating value for founders via increases in the value of the company rather than increasing the value of their take home pay. The quintessential example is Amazon which "loses" money but becomes more valuable because a large proportion of its expenses go toward growing future revenue streams rather than toward recurring operational expenses to maintain the current revenue stream.
4.0 Your goals are consistent with everyone "lawyering up".
4.1 That's probably not a healthy company culture.
That said, there are ways to structure it through stock classes like restricting the voting of their shares etc. Probably best to consult an attorney that is familiar with corporate structure and setup though.
Also you can word the profit sharing agreement and even the AOI so that any changes to the profit share require all shareholders to agree not a simple majority. This protects you all from two people icing out the third.
The money coming in belongs to the company, not to any individual, therefore you cannot share it the way you describe. There are two main mechanisms that you can use to share profits among individuals:
1) stock in the company: as shareholders and co-founders, you must have split the equity somehow (check http://foundrs.com for a calculator to figure that out).
2) the company can offer commissions to employees, as part of their compensation
Something in your description doesn't make sense: either you are the sole owner of the corporation, and those two other people don't own any shares. You are wondering how to bring them on-board. Or they are already shareholders, and you already had the discussion about how to split the equity.
This will probably still go horribly for you if you are successful. Instead what you would be better off doing, if you are launching the product alone, would be for you to have controlling interest in the entity, be the only managing member, and treat your partners fairly but ultimately be in control. This might result in a happier situation for everyone (yes including your partners).
2. You working harder than the other founders should be a salary negotiation.
3. If the company makes a profit, it should pay it out to the shareholders relative to their shares.
If you don't want these people as co-founders then of course that's another problem entirely.
leanpub: for writing books. uses Dropbox, web services to produce books from markdown. I can edit markdon files on my phone, ipad, Chromebook, and kaptops.
Google docs: quick notes that I might need in the future; having search helps find stuff later
Microsoft OneNote - for notebooks for travel planning, research, etc.
Emacs: org mode, but it takes effort to get started
This allows me to do basic "text editor like" typing, but with the option to apply styling and export to PDF.
Otherwise, any text editor you like for most of the stuff and the tools you need for the other stuff. gedit for all the texty stuff, and then import it into a WP to apply styles and export to PDF.
I guess I misunderstand your question: why don't you just use a word-processor for everything, and save as text? Why don't you just use a text editor and then import into a WP when needed?
Now if I had to pick three languages, they would probably be something along the lines of:
1. C. This language has been relevant for 40 years, and will remain relevant for at least another 40 years. Low level understanding of computer operation is paramount for a lot of advanced tasks.
2. Python/Ruby/Lua. A dynamic "scripting" language is very useful to get stuff done quickly when you need it.
3. A functional language: Haskell, ML or Lisp. Knowledge of this paradigm will make you a better programmer, regardless whether or not you get to use it in your day job.
There are languages I'd like to add to this list, namely something like Java/C# (a "managed" imperative language). And then some "brain teaser" languages to expand your horizons, Prolog is a good one for a rainy weekend and doing some simple Brainfuck programming because Brainfuck is to Turing machines what Lisp is to Lambda calculus.
But I disagree with the "3 languages" rule here, I'd recommend trying to learn a little bit of a new language every year. Next on my list is Rust.
Python - Python is by far the best 'glue' language out there. There are things Python isn't good for, bit it's far far easier to replace the performance critical bits of a python impl with a faster module, than the other way round
C - Gives you a good understanding of what the actual impact of each line of code has. Unlike ASM, it's still fairly approachable, and useful at scale. Unlike Java, you retain a good feeling of the instruction-level impact of each statement you make
This is, of course, only based off of what I know so far and what I would find most useful. I could probably trade JS for a SQL, though, if I was thinking purely in terms of work that I'm into now. I don't use C at all, except to look at Python bindings occasionally...but all the concepts I've learned from learning C are vital, even when working with high-level languages. Plus, it'd be nice to switch to iOS development at some point.
1. Good Scala - FPish Scala, coupled with Scala libraries such as Spark, mllib, scalaz, Scalding, Apache Math, colt, akka.
2. Bad Scala - Using Scala much more as an imperative lang, primarily for 3 purposes - shell scripting, web front-end html5 graphics and DOM manipulation with scalajs and web back-end with scalatra.
3. R - This one is not going anywhere in a million years thanks to Hadley Wickam and co. Now with SparkR I get to use #1 and #2 with #3.
My one desire is that Styla becomes a first class citizen in this ecosystem as well - when you need prolog, there is often no easy substitute.
Otherwise, it depends on what your main task is; possibilities: front end web, Anroid, iOS, back end web services, data science, etc.
In general, you need a scripting language. I prefer Ruby, but if you need to do data science, machine learning, etc., choose Python. A scripting language may suffice for web development also.
I am a proponent of learning Java. The Java ecosystem is huge and there is a lot of good stuff.
Choose an esoteric language. I personally like Haskell, Smalltalk and Lisp languages.
Java - Because it is the modern COBOL...everyone hates it, but there are so many systems and shops that use Java that it becomes a de factor requirement to learn it.
Close runners up are:
* Clojure - Because it is based on Scheme, which is based on Lisp, and takes the functional approach. * Python - Because the philosophy and syntax are beautiful* Ruby - Because it is really fast to get web server stuff done
With clojure/JVM, you get a Lisp as well as good knowledge of java interop / apis, so you'll be able to work in Java if you have to, plus you get all the java libs, and there's basically a java lib for anything you could ever want to do.
As your third I'd pick C since basically every other modern language / OS / low level lib is built on top of it. But it depends on how much you want/need to go down to that level. If you're just going to be doing web/mobile service development I might say go with something like Go, since it'll be more practical there.
Scala covers mainstream OO-programming and Haskell-style modern functional programming (monads, higher-kinded types). Moreover via Akka you have access to Erlang-style distributed programming.
C is vital for low-level programming like operating sytems and network stacks. C might be replaced eventually by Rust but if that happens at all, it will take at a decade or so.
All three languages have vast library and tool ecosystems at their disposal.
2) Elixir. Distributed systems, embedded software (IoT networks), critical/reliable web services and backends.
3 some systems level language (either Rust or C, Go is too laughable as a language for me and google stuff in general isn't something I can recommend any longer)
3) SQL, b/c working with databases and relational data has always been important, and that won't change.
I don't know if one can be fluent only in 3 languages, but I'm in the rank of those who say that learn more will not harm you.
You can reason a lot about, but when you've to learn a new language, just for the pleasure of learning and because it will make you a better programmer, one thing counts: instinct.
I'm often inspired by a blog post, a snippet of code or simply a tweet that sings the praises of something!I don't make forecasts for the future of a language, if it looks cool to me, I try play with it and see what's going on. (I think you can found practically any REPL on my laptop...)
Anyway I'll give my list of 3:
C#- Because I work with it from beta.F# - Because I can use .NET knowledge with a functional-first language (and it helps me open the path to other functional langs).Ruby - Because I'm still a fan of RoR and I love its KISS approach (and a smart dynamic language is useful for various tasks, e.g.: related to DBMS).
C - For interfacing with existing systems (POSIX, OpenCL, OpenGL etc) which would be too much effort to reproduce.
I struggle to think of a third which I'd absolutely need (other than assembly), so I'll opt for VHDL - for when we need to break free of the shackles of our CPU.
That said, whilst programming languages are fun to learn and tinker with, I find a lot of people give them too high a priority (hence you hear stuff like "now that Swift is open-sourced and available on Linux, iOS developers will be able to easily write Android apps"). Compared to UI frameworks like Cocoa, etc, a programming language is very quick and easy to learn.
That aside here are my choices:
For highly scalable, fast and realtime web appsElixir\Phoenix is my choice for its ruby like syntax, Erlang based language witha framework that has built in websocket support.Alternatively you can go with Golang or Scala\AKKA throwing in some Node for realtime capability.
For medium scale web apps, rapid development, building MVPs.Python\Flask is my choice for an expressive dynamic language and flexible framework with big ecosystem of extensions.alternatively you can go with django, ruby\rails or php\Laravel
For the enterprise, large project, large team, maintainable web appsC# and ASP.NET 5\Signalr is my choice for a dynamically compiled, statically typed, decently scalable with async capabilities framework including websocket support that runs on windows and linux
Alternatively you can go with Java\Scala\Play
For extra credits one from:
That should get you enough of a grip to pick up the remainder easily and when needed.
Currently I'm fluent with Ruby, Haskell and JS.
Both Haskell and Clojure are compiling to JS nowadays. I dont want to be "fluent" in JS for that reason, just know enough to debug the occasional problem.
3. Java - A typesafe, managed JVM language perfect for writing microservices, Android apps, etc. For anything bigger than would be appropriate for a scripting language or that must be maintained by several people. Java hits the sweet spot.
For lower level stuff and performance, definitely C++ and then eventually if you need it C as well, but I think it doesn't make much sense the other way round.
And as already said in this thread, it's good to pick up a functional language, just to broaden your horizon if nothing else.
I'm almost kind of serious. I had Ada in there, but C++ is building okay concurrency support, and is otherwise better at interfacing to other things. Maybe pull Fortran in favor of Ada? That's a thought. Not sure there are enough libraries in Ada.
Why these? Because you can build serious stuff. After awhile it gets boring writing yet another regular expression to parse yet another 'text file as database' blob thingy. I don't want to glue, I want to make what others glue together.
I can simulate rocket flight, planet formation, ocean temperatures, and predict the weather. I can write neural networks, do computer vision, deep learning. I can implement any type of database, implement Google search. I can write my own OS. I can hack a lot of this stuff together with Matlab, and then make it scream in C++ or Fortran.
Yes, C++, not C. I can write faster code in C++ (e.g. qsort vs std::sort), I can interface with both C and C++ libraries, and if I know C++ a pretty much know C by default. You can get to bare metal, or be more abstract. Why limit myself to learning C? Makes no sense. A lot of my C++ code looks like C, other times I use a lot of template magic. Depends on the needs.
I actually do most of my numerical stuff in the Python/NumPy/SciPy stack, and perhaps that is a better choice than Matlab. I'm being a bit contrarian to give contrast to the endless C/Python/JS answers, but Matlab does have a lot of libraries that aren't yet in the NumPy/SciPy stack. On the other hand, you can just write them in C and add them to Python if you need them. Trends are changing, but everyone I know that is into heavy math/algorithmic work is pretty handy at Matlab. I'm solely getting work to switch over to Python. Even then, down in the guts NumPy and SciPy are Fortran - you kind of need to know that stuff if you want to be a wizard and not a glue sticker.
Yes, I recognize this is a deeply individual answer that won't resonate with many. Variety is good, I think.
*edit: okay, Python/NumPy/SciPy stack wins over Matlab, even though STEM schools are still churning out Matlab jockeys. Like it or not, we do need to glue a lot of stuff together, and Python is fantastic at it. I'll leave my original answer here, as I assume the point of the thread is 'food for thought'.
2. PHP - There's a reason so much of the web is powered by PHP and that reason is simplicity for small stuff and dirt cheap hosting. PHP scales down better than any other language in that you can fill up a TB hard drive on a 512mb server and all of that code is going to run. It's too useful for the likes of simple sites to forgo, despite its other issues as a language.
3. Go - For high volume concurrency operations and other backbone "must be performant" code. That's where Go really excels and it's significantly faster to write this type of code with Go than with Java. Go just isn't there yet for your typical "websites" so it tends to be better for backend operations or APIs.
Clojure is a powerful and simple language that gives you access to the jvm and the web. The community follows a composable library based approach to functionality which allows you to really understand how your stack works.
Rust, because it's a safer alternative to c/c++ but still allows you to be bare metal. Want to work on microcontrollers? No problem!
So combined Clojure and Rust fluency give you the ability to develop for pretty much everything and they are incredibly powerful in their own rights.
And finally c# because it's a nice language with lots of well paying jobs.
Python: proof-of-concept, web-dev backend, scientific exploration
C: performance (low-latency), system (interface to most kernels), game-dev
If you speak them sufficient you can tackle most problems. If you then want to go further I suggest
Haskell: expressive, performance (through-put), reliability
Scheme (e.g. Chicken): expressive, simplicity, explorative computing
Additionally one might consider Java (and later Clojure, which should be easier if you already know Scheme and Java) to interface with the JVM world.
- OCaml: my favorite (at least at the moment) functional programming language and a very good choice when writing compilers and static analyzers, which is my main research area.
- Rust: a safe system programming language with a lot of good ideas imported from languages that I respect, and also with its own new things (i.e. borrow checker). I feel it's going to be a very important language in a few years.
- C: although I predict that Rust is going to become very big, C will always be there. Though not my favorite language by a long shot (I'm way too bad a programmer to be expected to handle it properly), its importance can't be denied and being knowledgable in C will be a skill that will be useful and desirable for a long time.
C - Pretty much everything is built on top of C right now.
It's telling that its not about the language but how you can use it.
C++ - yes low level programming, stable, lot's of resources, general usage and lot's of great libraries.
Python - Modern and easy scripting language. This to me is the swiss knife (and replaced Perl) of modern scripting programming languages. It can be used in nearly every project.
Swift/Rust - Both are great languages, I believe both will have a great future maybe Rust will take more time to gain traction.
2. (E)Lisp: Emacs is just too damn awesome, especially if you are limited to just three languages.
I'm actually bit surprised that no one else had mentioned Elisp so far, I would have assumed there were some Emacs guys here.
Python: gluing things together, prototyping, data munging/analysis, web development, ad-hoc non-relational data manipulation.
Java: Rock solid, widely used, maniacally backwards compatible, and easy to find work.
SQL: Imo the best way to handle relational data (and in my experience, almost all data I've seen has been relational).
2. F# - Great functional language that's compatible with C# and runs on Mono.
They all are first-class in Visual Studio, which is a big plus.
I'm writing as a mostly server side developer:- C: It is good to know low-level programming. (ASM would be a good pair). C is prevalent: Linux kernel is written in C.- JAVA: if you want cross-platform and GUI- Python: if you want something quick and dirty
That way I could still find a job in ten years from now.
Python: for when I need to get stuff done.
C: for when I need to talk to hardware.
If yes Assembly goes to the top
2. C. This is really C or C++ as you need something that's close to the metal and on some occasions nothing else will do. C probably edges out C++ in terms of versatility here;
3. Honestly, it'd probably be Java, which makes me sad. I'd like it to be Go but Java is just too ubiquitous and useful to ignore. It covers you for both a ton of web apps and Android development.
An alternative to (3) is really Python. The above list doesn't include any scripting languages, which is a weakness. Python covers this but really loses (first class) Android support. I don't like Python for large systems either.
For fun it might look a lot different eg Go, Swift and yes even C++. It really depends on what your goals are.
Software errors are really the easiest kind of mistakes to fix. The compiler doesn't have any feelings, it doesn't care, it just prompts you to fix things until you get it right. Wait'll you blow up a relationship, or make a fool of yourself in public, or cost your company a few million dollars.
CSS, to me, hasn't improved as browsers continue to break fairly old functionality and libraries only add competing styles rather than supersede and simply things. It is also impossible to write tests against, and even if you could one browser version later and your test can be wrong.
Just recently Firefox broke because of how an overflow: auto was handled. No other browser, just Firefox, and even then just during a random normal browser update not a major update revision. We had to fix by adding a float: left to that element and then test it in Safari, Chrome, IE10/Edge, and Opera. We only discovered this issue by luck, otherwise it would have entirely broken a major user facing menu.
That's the problem with having no tests for CSS, there's no red flags to warn when stuff breaks.
http://advogato.org/article/1087.html https://soylentnews.org/submit.pl?op=viewsub&subid=8131 http://www.kuro5hin.org/story/2015/7/4/42525/46892
15 votes makes front page, so for $75.00, you could register fifteen sockpuppets then post it immediately. I'd do that myself but I'm totally busted.
The Soylent story must be approved by the site's admin but I am certain it will be.
My Advogato story is already on the front page. It has lots of google juice but not much actual traffic anymore.
I am exhausted, I need to sleep but please email your post to:
Richard M. Stallman email@example.com
Eric Raymond firstname.lastname@example.org
Thomas Leavitt email@example.com
Jean Evans firstname.lastname@example.org
Dave Johnson email@example.com
Scout around for forums and blogs where this could be even remotely on-topic.
My question is; if and how would you make a buck? People looking for that kind of job usually don't have any money to spare?
As a free service to immegrants it would be nice, and you could learn a ton building the site.
Note the dates; I didnt just hijack your idea.
If you want to work together I would welcome it.
I think its a great idea, however a common problem I find is that some people dont use the internet, not because they cant but because they dont want to.
That obstacle can be overcome, for example by advertising on radio or in print, direct mail to publicly- or charitably-funded employment agencies and the like.
I mean, people understand you have to do what's best for you and that these kinds of opportunities don't grow on your trees. Be gracious, create a runway for your exit to ensure that operations are minimally impacted as best you can.
But in my estimation, seems like this is a no-brainer in the decision department and that since you'd considered leaving the other firm anyway, the other opportunity showing up when it did was fortuitous.
I wouldn't go sharing all of that with them (e.g. i was planning to leave anyway..) and instead be very gracious, relay you've accepting a different position that aligns better with your immediate and future goals and ask how you can help the transition before your exit date.
The only reason I see that you would stay put is if you want to relocate to SF (you'll need the visa). If that's not a major goal for you, then take the new job. If you relocate to SF, be aware that it will be a life-changing event, and you will be exposed to many more high-paying jobs in really cool companies. Either way, you won't be with your current employer for much longer, so don't worry about loyalty. Again, just treat everyone professionally.
Also, even assuming immigration and relocation issues get resolved, have you investigated what living in SF on $90k is going to be like? It's a spectacularly expensive place to live.
My thoughts if I were in this position: If immigration would make me happier than working for the company you are considering jumping to, your original plan seems to be sound. Otherwise, I'd make the jump.
> Otherwise, I plan to continue with this company even though the pay will be significantly less and work significantly more stressful. Said company in SF have been cutting costs and do not evaluate salaries more than once a year. Even after staying a year, I feel like my salary will only increase by $5-10k.
Something else I'd love to see is a server that's as easy as an iPad. Sandstorm is doing some work in this area, although I'm not convinced that the end result will be great. I want a server I can connect to, install apps from an app store as easily as on an iPad, configure as easily as an iPad, etc. Linux/FreeBSD/etc will always be needed for high performance websites and intensive or innovative computing needs but 95% of people just want to host a website or some email. I should be able to log on, go to the App Store, download the Minecraft server and be playing my game within minutes (with a nice GUI for configuration). Don't believe this is needed? The existence of SaaS is proof that it is - software is too hard and too complicated to install, configure and keep updated on your own server.
ReactOS is still far behind, although what they have accomplished so far is amazing.
Also an open-source virus scanner would be nice (besides ClamAV which if I recall correctly doesn't support real-time scanning).
And I would love to see an alternative to Android and iOS take off into the mainstream.
an alternative to open design alliance CAD DWG Autocad
I think after seeing how Microsoft has a big lock in with businesses offering FOSS solutions for like Linux or OSX would help some migrate away from Windows. Most Business and Legal apps are Windows only and commercial.
However, I do believe in open source if the soul purpose was to open source to begin with, just as long as people aren't naively jumping on the bandwagon after failing to gain traction or sales.
Perhaps a little too black and the white thinking above but in my own experience, open sourcing your product seems to attract freeloaders, your conversion falls, someone that would have gladly paid walks, leaving money on the table.
2. You have discovered the difference between pretend work and real work. SEO, blogging, branding, tweeting, etc. are pretend work. Real work is identifying leads, qualifying prospects, and closing deals...then doing the work and actually getting paid. Pretend work is easier because you can control it and nobody slams the door in your face when you tweet or goes with someone else because they were $5 cheaper or closes down with your invoices unpaid.
For all the things you've mentioned, I don't see a value proposition. How does Docker make someone money? More importantly how does Docker make any specific business money? It's a long road to develop a consultancy with a backlog.
When I go to your web page, it looks nice, but put yourself in my shoes, I'm a small company. Why would I care about "sustainable software development"? I'm a small biz, and when I hear "software development", I think of a barrel of cash being thrown out the window.
Consulting is really no different from product development: you have to be finding the pain, talking to people about their pain, and then you can mention how you might be able to solve that pain. As an example: "Has your company's systems been hacked? If you think the answer is no, think again. 83% [made up] of all companies have been hacked and don't even know it. We can do a basic security audit for you for [free/fixed-price] and if we can help you fix it, there's no charge."
Good luck and if you'd like to chat about Docker, let me know -- I'm working on a Docker sideline, but I try to focus on the pains it solves, e.g., the "it works on my machine" problem rather than, "hey, Docker here!" ;).
Then, you'll have to figure out how to educate your potential customers. If they don't know they have a problem, you'll have to teach them. Where do they hang out (online and in person)? Can you teach them why they would need your services and how you can help? Perhaps with a presentation or a whitepaper?
It takes time to generate attention on social media without controversy or craziness. Hang in there.
You have a great logo (hooray for spaceships!). Your website is also clean (not too overwhelming) and easy to navigate. I would recommend first selecting a few small businesses that you would like to have as clients. Can they understand your website - your message? I ask this because there are some areas where the wording can be rephrased. Especially with small businesses, you won't just be selling to technical people, but you will be selling to busy people.
Examples are powerful. These don't needed to be displayed publicly, but have something ready (and interesting!) to show potential clients what you can do. I don't see a problem with your two interests: security and usability auditing. Some people may advise you to focus on one or the other, but this is IMHO.
If you are willing to write blog articles, would you consider writing and submitting articles to other sites, like the huffingtonpost.com or medium.com? You want to make it as easy as possible for people to find you online; it doesn't take much for a website to get lost.
Ultimately, to get your first clients, I'd recommend treating each one with a lot of personal attention, and showing them that you truly care about them and their businesses. When you initiate contact with them (try to get a meeting, invite them to lunch or coffee, offer a contest, etc.), present your services as accessible, valuable, and profitable - a direct way to help their bottom line (with metrics to back you up). Even without client history, you can do this by doing old-school research and by being as prepared as possible for misinterpretations and specific concerns. Good luck!
There is literally no other way to build a consultancy business.
Do you know who your prospective customers are? Can you profile them to a very narrow group? Small companies as a group is a big segment. You need to narrow your prospective customer base to a very small group and then reach out to them.
Letting them know they need something has just resulted in defensive attitudes. So I can't figure out how to show my usefulness without forcing someone into (what they feel is) a corner.
Smaller the business more focused they are on either increasing the revenue or decreasing the cost. If you can't show how your service immediately impacts revenue or cost, you are not going to get much traction with them.
If you've ever tried marketing your services to small businesses who tend not to even be aware they /need/ your services, what have you done?
Tough proposition if you have to educate the market that they need something, you are going to need lot of money and resources for educating the market. You need to offer something that businesses already know they need. You may need to look at service providers who already providing complementary services to small businesses and target and consider them as customers.
Personally, I can't figure out what are you offering and why should I buy.
I offer web and mobile penetration tests, source code analysis and best practices workshops for companies between the seed and Series A stage (I have also worked with recognizable enterprises you'd know of). Through September I'm fully booked at 100% capacity, mostly with Y Combinator companies. I charge a static rate of $10,000/week, though I discount this for certain circumstances (good referral, long term contract, etc).
So, that's me. How did I get to this place? How can you get to this place?
1. I network a lot. I don't go to meetups. I don't have a blog. I don't hand out business cards. I network with people in 1x1 ways that show my value. My best referrals have come from people who I helped pro bono for something seemingly insignificant who turned out to be very well connected. I don't network in a way characteristic of a salesman, I do so in a way that starts by genuinely listening to someone talk about a problem. If I can help, I frame myself as a person who can solve a business problem that happens to be related to security, not as a fly-by-night freelancer. I talk to people because I genuinely like talking to people - I will often just welcome people to email me to chat - not for a consultation, literally just to chat. It opens doors. The best way to start this is to literally reach out to people who are in influential groups - not influential people themselves - and help them in an honest manner. They will naturally refer you to people who have both problems and excess money, who are your qualified leads.
2. I have a strong value proposition. My work involves a lot of technical proficiency - I'm not just using a vulnerability scanner - and I deliver very solid results every time. I don't give canned reports and I can communicate effectively with both developers and managers. I am consistently well referred to others and over time this has led me to a place where I have excellent clients more often than not and I have to say no more than I can say yes.
3. I have read probably every comment by patio11 (Patrick McKenzie) and tptacek (Thomas Ptacek) on consulting. I have probably read all of them several times, in fact. They are both very good people (talk to them sometime) and they both have excellent advice. Those comments give you literally everything you need to know to run a consultancy on your own. They will give you all the non-technical savvy you need to run a technical business.
4. I am confident in my rates and don't back down from them. I will change on scope, but not my rates. I charge weekly and if I am not a good financial fit for someone I make a good faith effort to redirect them somewhere else.
5. I'm honest. I used to work at a security firm, one of the largest in fact. A lot of firms do things I don't agree with, like writing "has autocomplete enabled" on a security report. This doesn't mean that they are bad people, but it is tonedeaf to what your client really wants most of the time. I don't exaggerate findings and I do present my work in a very honest light. I also strive to be honest in business dealings as well. There is a lot of snake oil in this industry and I don't rip off my clients - I will not work with someone if something feels "off" or I don't feel I'm legitimately contributing value.
You can do it. It took me a long time, but you can do it. I would advise you start out by subcontracting another firm that needs work. Dirty secret - many security firms will subcontract to you, and you can build a client base that way.
Let me know if I can help you in any way, my email is in my profile. I agree with what others have said here that you should focus on either security or usability. Do one thing, and one thing well (or at least one domain well). I also don't think you should be putting so much effort into marketing. A blog is helpful for long term leads, but it won't help you in < 6 months usually. Ads are impersonal and probably won't get you what you're looking for either. Find influential groups and mingle with them in an honest way.
Also, if you're going to work in security, I advise you to work at a security firm before striking out on your own. If nothing else, it will show you the entire process the "real players" use.
I think you need to figure yourself out a bit more, because you're not achieving what you want to yet. Sit down, and write answers to the following:
1. Who are you? What is your value proposition? Why should I hire you?
2. Look at your answer above. If you're dispassionate about it, does it really solve a business need? Ask a few uninvested friends in the field.
3. Do you have a network? If not, why do you have a blog or Twitter? That's not how you build a network. That's how you maintain a network and grow a network. It isn't a seed, it's water.
4. Who can you immediately identify who needs your services? How can you put yourself in front of them in a way that is more organic than forced?
1. Your site doesn't communicate to the small business owner. You need to tell/teach them what you can do for them, not use "jargon" or terms they can care less about. In the end they are wanting to know what problems you can solve or how you can help them make more money. So for example, instead of just saying security and usability on the site. Frame it in the terms of "did you know", and mention some specific statistics on SMB's where you have relevant knowledge which you can use to improve upon their issues for them. This is helping them understand what you offer versus just stating terms they may not be 100% familiar with.
2. In general SMB's don't care about you making their team slightly more efficient, they care how you can save them $10k/yr, or better yet, how you can make them an extra $10k or whatever the magic number is. Many times it is about how you market yourself and what you say more then what you are offering that helps them buy.
3. SMB's get defensive typically when you approach them too fast or too hard about what they are doing wrong. They all know they are doing things that aren't necessarily correct but they have "made it this far". So generally it is not about telling them they are wrong and need to change, its about framing the conversation to say, hey did you know that you have done amazing so far and I am impressed, but it got me thinking that if you did XYZ, you could actually make more money every month or save 1 FTE's time per year making you more net income etc. That is how you spin a conversation and avoid the defensive response. Of course you have to find your own valid position but that is how I do it. But this opens the door for them to say, oh yea? Tell me more. Even if they say your full of shit tell me more, it is opening the conversation and they aren't defensive.
What I think you are finding is that while you have the skills to fix issues, you don't yet know how to present and discuss those skills with people to convince them to hire you. You probably have had some luck but I would bet it was with people that were either introduced to you by someone they trust or you had a prior/current relationship with somehow. That isn't a knock, it is how we all start. The great news is at least IMO everyone can learn the sales/marketing skills, they aren't secret or all that hard, its just how you frame conversations with prospects. And you have to expect it will take building up a little bit of a relationship with them.
Feel free to reach out to me via email, I am pretty happy to share my experiences good and bad. And good luck, it is fun figuring it all out, at least I think it is.