1,787 karma · joined April 24, 2014
Sorry to say, there's no way to cut the gordian knot there: you're going to have to wait until you gain the necessary experience before you're a benefit rather than a liability.
If it's any consolation, most people with entry level / junior software engineer jobs are in the same boat, & there are whole companies that are essentially doomed because of a monoculture of people who haven't yet reached minimum competence. If you're surrounded by peers that know twelve languages & have been working as a dev for twenty years, then you're in a much better place than most of your cohort.
I avoid markdown because I don't like markup in general (and because I think styling of text is rarely useful), but if I need to work with it, I will whip something up to do the translation. A couple lines of sed is sufficient for handling whatever tiny subset of markdown is actually present.
In almost all cases, it's possible to optimize to make both parties happy; when this doesn't happen, it demonstrates a power asymmetry: the people who use these mechanisms (usually installed by an institution: public bathrooms, office coffee machines) matter less than the owners.
It's not an easy decision.
I can understand why lots of companies would use open source software but not contribute changes: if you already have your employees sign away their IP to the company, then there are legal complications to figuring out how to contribute, and if the company is publicly traded then internal modifications to open source software in order to support features that have not yet been announced may constitute an information leak if contributed upstream (and thus give illegal trading advantage to maintainers, etc). It's a big can of worms.
Someone who is self-taught or who learned to code via a different curriculum (say, one based around scheme like MIT's, or one based around javascript) naturally will think of object orientation in terms of something that a programmer implements, and will see prototype-based OO as easier to implement and easier to predict, since inheritance (particularly multiple inheritance) can quickly get complicated. But, this mandated curruculum based around strongly-typed compiled languages with class-based OO and a nearly ideological focus on the (mostly imaginary) benefits of inheritance has mass-produced students who are primed to think of class-based OO as the natural state of things rather than as a tool that is only sometimes appropriate.
In any prototype language, adding classes is trivial (it's just a matter of treating some objects as inviolate), and adding inheritance and even simple forms of multiple inheritance (if you have access to metatables / can override member lookup routines) isn't terribly difficult. The opposite is generally not true. But, again, this focus on class-based OO is largely not based on strategic thinking, but instead upon mechanisms designed to make sure large numbers of entry-level programmers are part of a specific monoculture. (This has succeeded: consider the proliferation of Java -- a language that is only very rarely an appropriate tool for any job.)
Yes, there are some python2 features that work differently in python3. But python3 has existed for a decade now, and there aren't real benefits to using forward-incompatible methods. Writing code that won't work in both is a mistake.
Package systems like pip have separate repositories for python2 and python3, and you can have both python2 and python3 installed along with pip3 and pip2, and a whole package set for each; a package that is not compatible with python3 won't be available from pip3. But, most packages were already compatible, and those that weren't have had many years to become compatible.
Any python package that currently doesn't support python3 is either no longer being maintained or is acting as a political statement.
There's another take on this: that, while the web is being used to implement desktop-application-like behaviors and distribute drm-protected content, web technologies are incredibly ill-suited to performing pretty much every task outside of the display of small static pages, and that every attempt to force the web to perform this kind of trick is the admittedly impressive result of a pile of ugly hacks that waste enormous amounts of resources -- whereas performing these tasks using technologies actually suited to them would be simpler for everyone involved and make this content accessible to people using less powerful hardware or with lower-bandwidth connections. I don't think anyone who has worked both with web technologies & with building native applications can seriously disagree with the idea that using web technologies to perform native application tasks requires a pile of ugly hacks, and I don't think anyone who has used older hardware to access newer sites can seriously deny that this kind of over-reach produces systems that are unusable without expensive new equipment. (We can also make the argument that, because advertising is neither the only revenue model for web-driven content nor the best by any measure, there's little sense in trying to support the huge and mostly crooked ad ecosystem when we can easily avoid it entirely.)
It used to be that people didn't associate the internet solely with the web, and that if people needed to use ssh, they'd use ssh; if they needed to use ftp or gopher, they'd use ftp or gopher. The web later became a catch-all protocol, and people started developing big complicated wrappers to make existing software work via a web browser while simultaneously various organizations started setting up their internal firewalls to whitelist only port 80. This is a mistake: the web was never designed to replace all of computing, and will never be able to do so in an acceptable manner. We should be taking the huge variety of the software ecosystem back, instead of trying to force everything into web tech and ignoring everything that doesn't fit.
It's very straightforward to write code that works in python 2 and python 3, and anyone learning python for the first time should be learning to write in that way. Ultimately, many of the compatibility changes are making things that have long been possible but considered poor style / bad habits no longer possible when doing so made the language easier to understand and behaviors more predictable (think print statement vs print function), or streamlining things that were originally bolted-on (think unicode).
It's not abnormal to be better at working on tasks with a bit of leeway than on very specific tickets. That said, if you frequently solve problems in a way different from the CTO's preference, moreso than your coworkers, then it's possible that there are some patterns that the CTO prefers that your coworkers have picked up and started using; you might get less hassle if you're doing things in that way, even when that way is objectively worse, because it puts less cognitive load on the CTO.
That said, it's very possible that the company has just gotten into a bad state and everybody's being nasty and over-critical about everybody else. Structuring commits in such a strange and broken way is indicative of other problems, since nobody would make the CTO approve every commit outside of a real emergency situation with tons of broken code being pushed into the critical path. It may just be that the company is going in a downward spiral and you're an arbitrary target for blame for everybody who's feeling the pressure.
Apple's market is primarily geared towards people who aren't interested in the tech and are paying for the logo. After all, anybody who wants an OS X equivalent system who knows what they're doing can buy a bog-standard PC and run some free unix on it with GNUStep. So, the licensing for Apple products doesn't matter because Apple's market excludes anybody who cares too much about licensing (or anything other than branding).
It might take some time to get used to walking while typing, but it definitely can be done. It's probably worthwhile in terms of long-term increases in productivity.
An article about the way that Meier's western-centric view of history caused the system he implemented to have interesting systematic biases that limit the set of behaviors that can be simulated in interesting and unexpected ways, Zizek-style, would have been interesting. But this isn't that article; mentioning the lack of dark ages and the enlightenment grand-narrative view of progress as a game mechanic doesn't deliver, since it's crit 101 stuff that anybody would immediately notice.
The author should have probably recognized that the article wasn't the one she intended to write, & eliminated the points that didn't add to its organic form, rather than trying to force it into the intended form. But, its flaws don't detract enough to justify not posting it or reading it.
If you're going to complain about somebody, you should expect people to complain right back about you. When they do so, writing a post whining about it ends up looking childish -- it's hardly "stalking" or "thought policing". People complain about each other's writing style on the internet all the time. Being butthurt about getting an email isn't so rare and precious that you should write a thinkpiece about it and post it to HN.
Also, "stolen intellectual property"? They should steal his pixie dust and unicorns too.