The problem with hypermodularization is that it takes time to make a decision on what module to use for every task. If you have to to do this with 100s of modules, you're wasting a lot of valuable time.
Does anybody know a quick way of making the right decision?
NPM is like a crowded graveyard nowadays (or like .com domain names - where all of the good module names have been taken along time ago and now all the best practice modules have completely irrelevant names). There are thousands of buggy modules in which development has stalled, and it's easy to waste a lot of time trying to separate the wheat from the chaff. I personally sometimes have to open up 5+ Github repositories to check their last commit, number of contributors, interfaces, code quality, unanswered issues, etc. Only after doing so am I able to make a decision.
In terms of knowing what's cutting-edge practice it seems you have to watch Twitter a lot and be careful not to follow every single bad idea.
I can't imagine what it'll be like to search for a module to handle something as common as config in a couple of years. Even when you constrain yourself to something like '12 factor config' there are many different implementations.
Don't even get me started on the insane assembly required to get webpack-, babel-, cssmodules-, and postcss- to all work together.
Just like the difference between pre-internet post-internet days, the problem is no longer finding the information, its filtering the large amounts of available information. Same with libraries and modules - there's probably a module for a LOT of things. You eventually develop a good sense for what heuristics make a good module, and you develop in such a way that the cost of an accidental bad module is low.
You can certainly find full-fledged frameworks out there that do everything for you and make your decisions for you, but the cost of getting that wrong is far higher than a bad module.
Honestly, I think it's better as a question/koan than as explained. Asking yourself how good these each of signals really is and asking yourself how they could fail is probably much better than having a random internet commentator try to talk you into it.
- last commit: I'm not surprised to see this here. Almost the entire industry is deeply invested in the idea that software can never be done, only abandoned, so deeply it's almost invisible. And projects with enough surface area likely are like the proverbial shark: either moving or dead. But for modules with limited, well-defined functionality, reaching a steady state where the project is actually done and updates are rare should actually be a sign of quality.
- number of contributors: again, I suspect that where this coheres with quality, it's probably correlated with size/surface area. Plenty of limited, well-defined projects probably are good with one or a handful of contributors.
- interfaces: are we talking about presentation of the project? Or the UX of an app? Either one could be a sign of overall craftsmanship, or it could be a sign that the author is concerned with appearances/marketing.
- code quality: tautologically true (code quality is related to project quality) but not helpful. One might easily mean "do the authors of this module follow my favorite code style guide," in which case I think this is extra likely to lead you astray.
- unanswered issues: unanswered issues seem like a great signal. If they're present (and real), the author(s) either can't fix them, or the project is abandoned while actually needing improvement. Inversely, if there are answered issues, the project is being used and attended to.
Basically, you look at the project's social presence.
That sounds kind of airy-fairy, but it's honestly how it works. You look at what the README says, how well it addresses questions, you look at the release history, see how maintainers interact with contributors, read a blog post or two to see how the maintainers are thinking.
And then you make a judgement call.
You don't have to get it right every time. That's the beauty of the modular approach. If you get it wrong, then you're smarter when you go to replace that piece of the infrastructure.
From a library developer perspective, the major issue I find with NPM is that it stores it's own copy of the source.
Old but useful libraries will often stagnate and get forked by users who still want/need to carry on development. Linking directly to a repo would make more sense but that's not how most people use NPM.
> In terms of knowing what's cutting-edge practice it seems you have to watch Twitter a lot and be careful not to follow every single bad idea.
A lot of this stems from the fact that todays solutions will likely become tomorrow's technical debt. It's not a popular opinion on HN but adjusting development to follow current/future web standards is insurance against future technical debt.
Webpack, for instance solves todays problems:
Currently, there are 3 non-standards (AMD, UMD, CommonJS). To make 3rd party libs interoperable, all 3 standards have to be supported so Webpack handles the messy details. Which BTW is a huge improvement over not being able to use libs that don't support whatever non-standard you choose. As for future standards, Webpack is moving in a very positive direction by adding ES6 module support in v2.
The next major shift will come with CSS extensions. Less, SASS, Stylus are the current common non-standard solutions to the difficulty of managing large CSS codebases. I'd expect that the web standards people will eventually cherry-pick the good parts from them the way they adopted the good parts of CoffeeScript in ES6. Unfortunately, those who heavily rely on Less, SASS and Stylus will either have to adapt or continue to use/support the tools of a dying standard when everybody else moves on.
Bundling as we know it today is an anti-pattern but also a necessary evil due to the limitations of HTTPv1. Warming intermediate caches helps but a warm local cache trumps all. Unfortunately, bundling is in such widespread use the chances of a user having a warm cache are essentially nil.
HTTPv2 will (hopefully) move influence developers to abandon bundling strategies, thereby improving cache reliability for all.
The next major shift we need to improve cache reliability is a widely-adopted versioning strategy that library devs use to mark packages for long-term support. It's insane that everybody relies on bleeding version of dependencies but everybody bundles everything so there's no measurable benefit to sticking with an older, more stable version of a dependency.
I would touch on the issues with the widespread adoption of functional-specific supersets of JS but -- considering the tastes of many HN users -- I really don't feel like being downvoted into oblivion.
> Does anybody know a quick way of making the right decision?
Try to see things from a long-term perspective. Stay cognizant of the nature of the hype cycle.
Some technologies really do have the potential to provide huge improvements in performance and usability. Some will eventually provide the improvements they promise but the first version won't be good enough.
Most tools -- no matter how useful they appear to be today -- will likely die or be replaced by something better in the future.
Often the quickest replacement for an `unwrap` is an `unwrap_or` with a sensible default.
Other times where error-handling is important use a `match` there and then. And don't nest the arms of the match instead use the return of the match expression.
On the other hand, I found `try!` pretty awkward. Especially since quite often you need to create custom errors alongside it and can go down a rabbit hole in which you have to read confusing compiler messages from within macros about traits not being implemented correctly, and lifetimes missing, etc.
- If you're just browsing and you run a business, drop me an
email, I'd love to figure out ways to add value to your business.
- If you have an idea already I work with most technologies
and can quickly build an MVP/prototype from scratch or
get up-to-speed to contribute on a currently-running project.
* * *
I'm an experienced full-stack developer.
Don't hesitate to get in touch if you think I can help you in any way!
I enjoy programming but 'working as a programmer' is infuriating.
There are so many interesting product ideas yet 'me-too' CRUD app recreations of previously successful incumbents products are highly desired. This is particularly true in the startup ecosystems where kids talk about 'interesting' problems and finding 'purpose' and yet are blindly following the mantras and motivational speeches of trite capitalists.
I currently work as a freelancer/contractor in London and I am happy as I make enough money to finance my own intellectual and creative interests for months on end. I hope I'll soon meet other intellectually curious people doing the same thing, and hope we'll be able to join forces to teach ourselves things or perhaps even work on small projects together.
Of course I feel extremely lucky to be in this position which has nothing to do with wanting a slower pace and everything to do with wanting to exert my whole self. And I can't say whether it will be good for me or bad for me; I'm certainly learning a lot about myself and the practicalities of doing this.
Why do so many threads always have to devolve into a bizarre condemnation of capitalism? If you don't want to code for a living, then don't code for a living. Do it for fun and make money some other way. If you're upset that you have to work to survive, well, then maybe you need to have a reality check.
It's not bizarre. There is a long historical culture of criticism of capitalism. It's just been squashed in recent decades.
I am a particularly privileged individual because I have a choice of what labor I can do, and even how much to an extent. Most people don't have the choice of just switching careers because they feel like it, and even fewer have the option of even realizing that there is some sort of activity that would be more fulfilling than what they do to survive.
I believe the reality check needs to occur in the people who are too used to their own comfort that they can't even lift their blinders to look outside their own social environments and see the injustice that is happening on a massive scale in the world.
> I am a particularly privileged individual because I have a choice of what labor I can do, and even how much to an extent. Most people don't have the choice of just switching careers because they feel like it, and even fewer have the option of even realizing that there is some sort of activity that would be more fulfilling than what they do to survive.
This is poisonous thinking. Programming is one of the most accessible industries on the planet that doesn't involve physical labor. If somebody has the desire, they can learn how to program and land a job for FREE.
People seem to be squarely divided into two groups in this world: those who believe life happens to them, and those who believe that they make life happen.
> This is poisonous thinking. Programming is one of the most accessible industries on the planet that doesn't involve physical labor. If somebody has the desire, they can learn how to program and land a job for FREE.
Not when you spend 8+ hours doing a demanding but low-paying job (like most are) and then have to come home (+1-2h) to take care of the spouse/children/parents. And even without the latter obligations, there's only so much one can do after being exhausted doing the day; life is not just about working, and many (most?) people can't psychologically sustain doing only work for longer periods of time.
No, that's not the best you can do. What we can and should be doing is questioning the systemic inequalities and structures that cause poverty and wage dependence to exist in the first place. Whatever conclusion you come to, if you don't first put in the effort to see if there actually is a reason for existence to be this way, then yes, maybe all you can do is offer opportunities to a select few.
Some people try. Some of them even succeed. It's worth to try, but let's not act surprised when the aggregate results look poorly.
Issues like this are, like it or not, best viewed globally, not locally. If you raise the bar until, say, 20% of people can't handle it anymore, then you can go and preach about willpower all day long, but it won't change the fact that every fifth person simply won't have it, and it's not really their fault.
It's hard to pull yourself up by your own bootstraps if you weren't born with them (and not everyone in the world is). Acknowledging reality does nothing to dissuade people from trying their hardest, but sometimes one's hardest isn't enough.
What? Have you ever participated in a criticism of capitalism before? Capitalists are by definition people who own and profit from private property (which includes things like small businesses, large businesses, land that is rented out, etc, and does not include things such as your personal home, your car, your laptop). All the people you listed are likely not capitalists in any sense, other than your simplistic analysis that anybody who lives in a capitalist society is a capitalist.
Those people that you all mentioned are the working class. They are the people who are obligated to trade their time in labor for wages which are used (usually 100%) to pay for their own needs such as food, housing, and savings for retirement, which will also be spend of food and housing, just later in life.
Pension funds (as far as I know, please correct me if I'm wrong) are financial instruments which are meant to be used for future consumption during retirement. They are not financial investments that are used to generate more capital. This makes them distinct from capitalist investments which are used for the purpose of increasing their capital wealth, most of which is unable to be consumed.
Some of the alternatives that seem to work are better capitalism such as YCs "build something people want" model. I'm not sure socialist approaches work very well for programming apart maybe from academia.
My suggestion is actually not to find interesting clients. My suggestion is to find high-paying clients and then to become your own 'interesting' client (aka, reduce your lifestyle cost to a point in which you're able to use this money to sustain months of self-directed work).
Nothing is perfect and I've no idea whether this particular idiosyncrasy would suit other people - I'm still undecided whether it's for me.
That's basically what I've been doing. I'm not convinced that's the only possible way, which is why I asked. Working on pointless projects is fine for a short period of time (at least for me - I tried that approach multiple times in the past), but a potential source of burnout in the long run...
Have you considered taking a pay cut to work more full time but at a company that you think is doing valuable work? There are a lot of companies trying to "change the world", surely one lines up with your values. Though sometimes the skills they want are more specialized than generic software development (which is what I have :( ).
Let's be honest. Freelancers are not there to find "interesting clients". They are a temporary resource that enables a client to get a job done they under-resourced.
You have a choice as a freelancer
1) Become money focused. Earn as much as you can for as long as you can.
2) Become idea focused. Earn as much as you can until you have enough to bootstrap the idea. Rinse and repeat.
3) Become money focused but use your income to get the idea fleshed out using upwork.com
If you can get a few of you together it will be a better experience. Working at a co-location hub can be worth it.
It's actually a larger question than you perhaps realize. There are different kinds of freelancing. The spectrum ranges from something that looks like "remote" work to something more akin to agency-like project work.
That former is much easier. The latter pays better but requires a whole bunch of other skills, and takes much more time. The two aren't mutually exclusive however, and that is what I've done as part of my strategy.
There is a monthly find a freelancer thread on here where you might be able to find a gig. Work on building your portfolio/reputation. I'd suggest small projects at reduced rates.
Next, I'd visit a lawyer and get a template contract worked out. Rather than have him write one from scratch, find one that includes a lot of the things you want and have him tweak it. It will be cheaper that way. Most important (IMO) are indemnification, terms of payment, and arbitration.
Get used to promoting yourself. Have your short and long "elevator pitch" together. Put together a landing page and get some business cards. Talk.To.Everyone! You never know where and when your next client will come from.
One of the issues you will run into is the feast or famine issue. You never know when you will get your next client, you have to always be on the lookout and courting -- overloading the queue because a percentage will drop out. If you don't find the next soon enough, then famine. If, as it happens often, several prospects say yes, then you feast. By feast I mean work a lot of hours and save up so you can weather the next famine.
What are your skills? Do you have a portfolio? How about an up-to-date linked-in profile?
You know I've been wondering this lately too. I haven't done any freelance work but I want to get into it. I'm still not sure the answer, but I started by turning on the 'Hire Me' buttons on my Codepen and GitHub accounts. I just launched a portfolio website (last night actually) that showcases a few of my projects and lists my contact information. I think my next step would be to check out sites like elance etc. But I'd love to hear other ideas from successful freelancers.
Not a dumb question at all. I've wondered the same thing myself. Say you're working full time and have $X/mo in fixed expenses. If you leave that job for freelancing, all of a sudden you're going to be making tons less than you were as a full-timer. How do you bridge that gap?
Pick a niche (with good characteristics) and make sure to be good at things in that niche. From there on, the client or employer will obviously pay you in the way that you want (freelance or employee). The work will also be maximally interesting. I personally get a fantastic rate doing pretty much what I like from my home office.
Could you give an example of niches like that? I'm currently doing all sort of things, ranging from reverse engineering to wordpress websites (yeah, i'm a freelancer...), and I'm super curious to hear what people found out to be "good" niches and what were "bad" niches?
Echoing with the OP said. Figure out who your ideal client is: who they are, what projects they offer, how much they pay, etc. then go to where those ideal clients would hang out. Talk to them, understand them and figure out how you can relieve whatever business discomfort they’re facing.
This will take some time but you’ll eventually get a stream of the type of client that can support the lifestyle you want and want to work and refer you continuously.
The problem with CRUD apps is that they are architected around persistance, the product particularities and business logic are then like second class citizens that must play by CRUD-world or the framework of the year rules.
The result is often a mediocre and painful to maintain app which may fulfill a bureaucracies' objectives but for the programmer it feels like being forced to be unprofessional , as if a surgeon was asked to perform an operation with a rusty saw.
> "When your expertise is limited to, let’s say, art, level design, performances or whatever, you’ll eventually convince yourself that it’s the most important thing in the game."
This is my experience, too. Without autonomy and ownership across a whole project it's very easy for people to get tunnel vision about what's valuable. This causes general harm to both the team and the outcome of its project.
I'm not sure how to lessen the effect other than perhaps by making projects small enough that they can be worked on by just a few people and using this phase to establish a kernel of good ideas and team cohesion.
Perhaps there might be another structure where the tools that are provided to the team are literally so good that the main project can be done by just a few people working on everything together. (Idealistic vision here.)
I don't have the source handy but there is research showing that if you ask individuals on a successful project the % that they contributed, the total of the perceived contributions generally equals around 140%. I've wondered if simply pointing out this issue might help reduce the inflated sense of personal contribution
I wasn't able to find your particular point in my searching, but I did find a paper from 2000 that came to a similar conclusion
"This difference in perception has a potential of creating tension within the team and disrupting the cooperation, because there is a possibility that every single team member may feel to be undervalued by others and not receive his or her due."
"The perception gap can be a threat to the team and its
goals. Facing the gap requires interpersonal skills on the
part of the team management and team members."
Short equations don't express complex thoughts. They express the short result of complex proofs, which are themselves essentially definitions. Math is a process of describing reality using definitions built on definitions. The analogy to communicating social, political, or creative thoughts is ridiculous.
If you want to prove me wrong, show me a complex thought expressed in 140 characters. Again, I agree that complex thought can result in a very interesting tweet, but the tweet will not be able to convey all the thought behind it.
Technology is obviously political. Anyone trying to ignore that has an agenda to maintain the status quo. There is no sense in pretending we're solving mindless puzzles in a vaccuum; we're out to "disrupt" the world.
I didn't consider it when I posted the link, but Strange Loop provides an unusual platform for technologists who actually do "think different". Many use their tech platform to reinforce racism in notoriously racist tech spaces. But some take scifi seriously and try to improve the world. That matters.
Here's the tech good ol' boy world, where you're supposed to passively accept casual racism in ranch houses: "It was really quite lovely. Later that day, in the jeep to the ranch house where everyone was staying, he started up with the casual racism, and everyone ignored him." (https://twitter.com/maradydd/status/606799534983770112)
I didn't say tech couldn't relate to politics, nor do I wish to hang out with racists.
I implied that not all people would care to waste their time in the company of no-platformers. Disinterest is a perfectly reasonable position to take when faced with the proposition of hanging out with people with wildly different political beliefs than yourself.
The idea that some people might dislike no platforming almost as much as they dislike racism shouldn't surprise you.
It's not safe to support organisations that choose whether to platform based on the whims of a mob or their leaders.
I disagree with Alex Miller's decision about Curtis Yarvin, but as far as I can tell, this is the only controversial speaker related issue that he's made.
Have you actually been to Strangeloop? I have, and I'll go again because the quality of the speakers and attendees is top notch. They're aren't afraid to host some really esoteric stuff. Thus, it's a place to really learn some cool stuff.
I've met Alex at Strangeloop and he seems like a pretty humble and reasonable guy.
His role isn't an easy one, and I see no reason not to attend what has been a pretty excellent run of conferences because of one lapse of judgement by the founder.
Thomas Edison claimed to have a long lasting light bulb before he actually did. He showed it to reporters one at a time in a booth. Between observers, he would change out the light for a fresh one. Source "How We Got to Now: Light" (on Netflix currently, at least in the US). Found the clip on PBS. Skip to 2:20 for the specific part: http://www.pbs.org/how-we-got-to-now/big-ideas/light/
There's a billion and one things one could mention about Tesla. Sadly, only the tiny universe of people who dislike Edison (and see him as a businessman, not an inventor) are aware of Tesla's contributions.
"Vaporware first implied intentional fraud when it was applied to the Ovation office suite in 1983; the suite's demonstration was well received by the press, but the product was later revealed to have never existed."