11 ms·
Think of it this way: application development, software engineering, and computer science (and data science and ... etc) sometimes use the same tools but are al
by swatcoder 8y ago
Think of it this way: application development, software engineering, and computer science (and data science and ... etc) sometimes use the same tools but are all different disciplines.
Universities traditionally focused on Computer Science and their graduates would often need a lot of grooming before they could really be independently and reliably productive in the commercial words of application development or software engineering. Importantly, it was less grooming than someone who studied something like English or Sociology or History, but it was still a different discipline than what the job market demanded.
You jumped into the job market directly. You learned to develop applications, research API's, study trends, and participate as a team member in development workflows under commercial pressure. You don't know how to compose and compare sort functions for abstract sets of N elements because you never needed to. You just use sort().
And that's okay! Inventing new algorithms with theoretical significance is not your job! You have other skills and they're of much more immediate value!
- guitarbill 8y agoseconding this, creating value is orthogonal to knowing CS. see the creator of homebrew, Max Howell infamously failing to invert a binary tree in an interview: https://mobile.twitter.com/mxcl/status/608682016205344768?lang=en https://mobile.twitter.com/mxcl/status/608682016205344768?la...
- commandlinefan 8y agoI have yet to see a definition of what “invert a binary tree” even means.
- nickbarnwell 8y agoI think "mirror" is a more intuitive description of the problem, but essentially you reverse all of the left and right subtrees. This Quora question [1] has a few different approaches listed. [1]: https://www.quora.com/What-is-the-algorithmic-approach-to-invert-a-given-binary-tree https://www.quora.com/What-is-the-algorithmic-approach-to-in...
- balfirevic 8y agoThat doesn't sound like "inverting". If that is what it means then it is indeed a bad name. I always thought it means making one of the leaf nodes a root of the tree. Physically, it would look like taking one of the leaf nodes with your fingers and "hanging" the tree off of it.
- BearOso 8y agoInverting means inverting the sort order. The easy answer is to encapsulate the tree in a new structure and add a Boolean flag called “inverted,” since you’re just reinterpreting the meaning of left and right children. What you describe is called “rotation,” and is used to rebalance.
- boomlinde 8y agoinvert: to reverse in position, order, or relationship
- fenomas 8y agoI'm confused. Doesn't the operation described in those answers just rename each node's properties, but leave the topology of the data structure unchanged? Meaning one could just have the code accessing the tree swap which names it accesses, and the tree would behave as "inverted" with no actual need to invert anything?
- peterkelly 8y agoIt's when you swap the left and right branches of every node, e.g.: def invert(node): if node is not None: left = invert(node.left) right = invert(node.right) node.left = right node.right = left return node
- aldanor 8y agoOr simply node.left, node.right = map(invert, (node.right, node.left))
- quietbritishjim 8y agoCoalescing those four lines onto one is fine, but writing: map(invert, (node.right, node.left)) is definitely not simpler than: invert(node.right), invert(node.left)
- peterkelly 8y agoIndeed - I just wanted to write it in a form that could easily be mapped to languages which don't support multiple simultaneous assignments :)
- deleted 8y ago[deleted]
- sigi45 8y agoI read it, tried it out and it didn't took me long to understand and solve that issue. If you hack around for a long time and you never ever felt the need or motivation to understand very simple tree algorithms, okay. But don't rant when a company like google expects that from you. He also answered, after a few years on a website about it: https://www.quora.com/Whats-the-logic-behind-Google-rejecting-Max-Howell-the-author-of-Homebrew-for-not-being-able-to-invert-a-binary-tree https://www.quora.com/Whats-the-logic-behind-Google-rejectin...
- deleted 8y ago[deleted]
- supercall 8y agoWhat's the difference between application development and software engineering?
- Jtsummers 8y agoYou can apply software engineering to develop an application, but you can also do application development without any proper software engineering. Software Engineering is a design discipline, management discipline, and engineering discipline. Application development is (principally) the act of building an application by writing code. It doesn't require design, management, or engineering discipline to accomplish. But it's better if you've done those things (minimally, the engineering and design portions). At the same time, a junior software engineer may not be responsible for anything but the writing of code, where others have determined the design and engineering aspects and are conducting project management for them. Or with only limited responsibility (such as developing tests for the aspects they're responsible for developing, which is a part of the engineering discipline: V&V).
- ksikka 8y agoIn practice, the main difference is the pay / relative "rank" within a company. Employer's perspective: Want to hire a software engineer but don't have the budget? Create a new role, call it something else, now the pay difference is justified. Context - I'm a software engineer by title but my job is application development. Which is hard, mind you! It looks like simple coding but it involves prioritizing, making smart decisions, and making all stakeholders happy.
- mychael 8y agoNothing. It sounds like this person is inventing their own dichotomies.
- sodafountan 8y agoI've worked in both of those environments, where my titles were literally "application developer" and "software engineer". In the former, we did a lot of things without process and worked on a wide variety of applications and in the latter I worked in an Agile environment focusing on a core product.
- aphextron 8y ago>And that's okay! Inventing new algorithms with theoretical significance is not your job! You have other skills and they're of much more immediate value! Except when it comes to getting a job. Forget any of the rest of your skills, because we all know the only thing that matters when interviewing is an ability to recite CS algorithms out of memory and solve obtuse puzzles while pretending you've never seen them.
- johnmaguire2013 8y agoAs a self-taught programmer who doesn't have a CS degree, my experience has been that this is not a significant hurdle to any workplace that I would seriously consider applying.
- el_benhameen 8y agoWhere do you find jobs to apply to? I am also a self-taught programmer without a CS degree, and it seems that a surprisingly large portion of companies use obtuse algo/whiteboarding interview questions. My objection is less that I don’t know or can’t learn them and more that it seems like a waste of time to prep for stuff that isn’t useful.
- yc12340 8y agoThose companies aren't hiring, they are just sifting market for rock starts. I have seen this in numerous places already — when a company has enough product leaders, but still enough money/time to hire a couple more, they begin whiteboarding people. Several years later those product owners will leave, and suddenly the interviews are reduced to "you worked with <insert technology name>? Know what <insert technical term> is? Accepte^W erm, I mean we will contact you tomorrow!" Several weeks after passing the interview you start asking colleagues about their own interviews. And everyone has wastly different experience. Some were hired after being harrassed for hours. Others got job thanks to friendly tip...
- tekknik 8y ago
- tempestn 8y agoI agree with you to some extent, but I do think sometimes this point of view is taken too far. Some basis in theory is useful, not so much because you'll directly apply something you learned in a CS class, but because it helps you learn how to think about difficult problems. Most real world work is indeed just putting pieces together to get the result you need, but there are occasionally things that really are difficult, especially to do efficiently. I think it could legitimately be a concern if an experienced programmer couldn't pass an introductory CS course. To the OP, presumably your fiancé has study materials as well as just questions—why not audit the course, and learn how to solve the problems you're having difficulty with? (Then write a Tell HN and update us on whether you feel you learned anything useful!)
- scarface74 8y agoI think I have my geek bona fides, but, studying subjects like Domain Driven Design, Clean Architecture, Patterns of Enterprise Application Architecture etc. The hard problems that I think most people end up solving are more often business, people and process problems than computer science problems.
- throwawaylolx 8y agoWhat are the differences you consider when making a distinction between application development and software engineering? It seems to me that application development is a subset of SE.