206 karma · joined July 24, 2010
Just wanted to share my 2 week project with you guys for feedback and hopefully some marketing tips :) Anyone out there having any luck with Android apps? I'm the male actor in the commercial despite my director's best wishes... He tried firing me several times indirectly and directly and I refused to be let go. I figured "I'm a developer, how hard can acting be?" Not so easy :(
It is almost twilight-zonish to see the US government in favor of Internet censorship when speeches against it like this exist: http://secretaryclinton.wordpress.com/2011/02/15/secretary-o....
Why isn't the US media all over things like this? So much for being the vanguards of freedom...
To give some context on the trade reference I referred to, it was an internal tracking within the STP system used solely for tracking state and for communication between IT and the business. It was a simple date + numeric value used in our STP system for users to use in our Struts web and C# front end to check trade state through the STP flow and communicate with us if issues arose.
We did have lots of interfaces where it made sense and relied highly on object composition to represent financial concepts more richly and for inject-ability via Spring and Unit testing (makes writing tests easier when you mock things out). Asset types, security identifiers, etc, were represented correctly from an OO perspective and were a part of the xsd layer/interface between us and the trading systems. To us these were read-only values we just passed through for STP.
You are right about interfaces and unit testing but this is one case I highlighted of many where I think the lead was going over board. The internal trade reference was the same for 8 years and still the same to this day (which gives it another 3 years since I left for a total of 11 years). It never had more than one concrete class. It is no big deal on its own, but when combined with the other interfaces that only have one concrete class, it just bloats the system for no good reason.
Design and architecture is good for the reasons you have mentioned and more but it can go over board as is the case here IMO. There were other instances of that in our code base but that would take an entire blog post to cover some of the atrocities this engineer created because of his forecasting ability.
I once had an argument with a Wall Street Java developer who was made the "lead" of one of our team projects. He decreed that every single class have an interface so that we can be generic and not tightly couple any of the components to concrete classes. I agreed that in some instances where functionality, i.e. methods that can be represented by different classes with the same method signatures made sense but not every single class needs an interface (if that is the case just go with a beautiful dynamically typed language like Python and avoid the code bloat). He got management on his side and we went off and built an overly engineered Straight Through Processing solution. It was a sheer nightmare to debug and the code bloat made me scream one day when we had a serious production issue. Even our manager (who finally had to look at the code when most of us were out on vacation once to answer some user questions) was flabbergasted at the amount of code he had to read through in order to answer the most trivial of questions. One extreme example was an interface for trade references. Our trade references were always strings with a date and some numeric value concatenated to it. The "engineer" decided that we needed an interface for this and added one interface and concrete class for our trade references. I told him that all classes needing trade references instance variables could just have a String instance variable named tradeReference or something like that and he went on to give me a design pattern lecture. We argued for nearly 20 minutes about this silly thing as he kept insisting that the future was unknown so we have to future proof the code from unforeseeable changes. When he said this I asked him to remove the Crystal ball plugin he had in Eclipse for predicting the future and get real. He got angry and we had a team call to waste yet another hour of developer time to discuss this. In the call I mentioned that our trade references scheme had not changed in 8 years and was unlikely to change... I lost the debate anyway. The ratio for most of the code base from interface to concrete class was largely 1-1 thus not justifying this code bloat approach.
Experienced developers (at least I think) seem to have these crystal balls in their heads or IDEs and usually try to be clairvoyant when it comes down to building a product. We need to get out of the business of overly engineering and just do as my friend said: "build for today's requirements". It is called software for a reason: it is soft. It can change (most likely will), can be refactored, redesigned, and/or incrementally made better or more abstract to accommodate changes. I am in no way saying no design, just limit it and get to work. A successfully built product is more satisfying then the imaginations of your head and the "perfect" engineering/scaling solution that never materializes. Users will like you, you will like you, and the team will get an andrenaline boost with each and every release keeping the spirits high. Remove the Crystal ball plugin from your head/IDE and stop trying to be clairvoyant and be a developer.
Innovation coming from a strong central government? What happened to the Soviet Union's innovation? They had a strong central government and collapsed... almost zero innovation came from them. What about China? Largely a beneficiary of treaties like NAFTA and GATT which gives them a great opportunity to ship in products made with substandard wages or as some would argue, slave labor wages. They also appear to be manipulating their currency and have a copy-and-paste business model. I see little innovation here as well.
I do agree that states and the fed can collaborate on issues of national interest that apply to all parties but I am totally against shredding the constitution or increasing the size of the fed because we are not in 1787. This country got to where it got because of freedom and allowing the people, like hackers, to tinker, fail, experiment, succeed, and do whatever they wanted as long as they did not infringe on the rights of others. SOPA and the NDAA are acts of central government that are appalling. Centralize government did not get us here, free people did.
Maybe this should be a tech-only forum to avoid getting people charged up and polarized.
The media needs to stop its blackout of Paul and the smear campaign and cover the issues he is highlighting which are of the utmost importance.
So many businesses/niches are in pain because they do not have software solutions or have to use substandard solutions to get the day to day going. Your advice to go work for another industry is solid and I would even go further and say volunteer on a part-time basis just to make the contacts and see where the problems are. If us tech guys did this more, we would uncover an abundant source of opportunity in need of addressing from people willing to pay to have the pain go away! I am currently looking to do this in the construction industry where some of my friends work.
Great post
I think this is a hard one without working on a big project with senior people. I struggled with this for years and still do but have gotten a little better thanks to senior developers guiding me. I think besides reading books and attending lectures or listening in on talks online, I think you need to find a problem sizable enough and build it from scratch. My work with senior guys has shown me that designing on paper and the white board is essential to tackling the problem for understanding and eventually building it. The patterns will reveal themselves as you go through this exercise if any patterns are needed at all, and I think this is something you definitely will not learn overnight but overtime by getting your hands dirty. If you have not visited this site infoq.com, please do so. It has tons of experts speaking on it. I have been able to incorporate some of what I have learned from here to the job. A quick link to how YouTube was built: http://www.youtube.com/watch?v=ZW5_eEKEC28&feature=youtu...
Really good talk with lots of jewels. Another good book for you: http://www.amazon.com/Scalable-Internet-Architectures-Theo-S...
Hope this helps.
I have faced (maybe still facing) the same issue and have started to employee 3 techniques, first two of which Tim Ferris mentioned. 1- Cultivate selective ignorance 2- Batching tasks up 3- Create a schedule
How would this help? HN, Reddit, and the other news and information sites out there are awesome but can become time-thieves if you let them. We come to these sites to see what is the latest and greatest in the news, for inspiration, and also to learn so that we can do things better. The question is: how much information do we need to be adequately informed and how much do we need to learn in order to get to work on something we are passionate about? Not as much as we would think in my opinion. Cultivating selective ignorance is necessary to ward off the feelings of "I need to read more in order to get this thing going", or "I am falling behind, need to catch up with the news". We will never be able to get it all and thus just need to focus and specialize to some extent. Well rounded-ness is great, but in excess it will give you no depth in anything. Do not try to consume all data from all sources; we cannot keep up with the data deluge and will drown in it if we foolishly attempt to do so. Use what you already know, get started and focus on your ideas. If you do not you will just build up all kinds of anxieties and will feel down on yourself for not doing anything. In addition, this data deluge is also overwhelming and you may feel like you are not smart enough or the product will not be good enough for launch. It feels good to even do the simplest of tasks you set out to do and makes you want to do more. I blog about something similar to this here: http://techjobsspace.blogspot.com/2010/11/and-furthermore-my...
Batching and scheduling are awesome concepts to start using immediately. Information addict? I know I am and love to consume much data. My information-rich diet includes all the stuff you guys are reading but what I do slightly differently than some is set dates and times during the week on my phone calendar to read this data. Instead of reading everyday I pick some days of the week to get it all in and limit myself to that. If you have a calendar on your phone or pc or the web, use that to control the addiction. You do not need to deprive yourself completely (unless it is a severe problem) just schedule when it is ok to read. I use this for errands and other things as well. We all need breaks from work to unwind; use this time to catch up with friends and family, errands, and reading. Stick to your schedule and it will all fall into place eventually. Paul Graham definitely does not want this site to be a time-sink.
Hope this helps!
To fakelvis's point, IT in finance could be fantastic if you get into a good area (I believe they are far and few). You will be working on cutting edge stuff and decommissioning legacy apps at every opportunity that presents itself for a re-ramp of the app. At my previous employer, I was lucky to join a team with tons of legacy that worked and was problematic. Mandates came down from management and the business users to rewrite and re-platform the old stuff to accomodate new requirements. We were given the green light to build the new platform in whatever way we saw fit. We were free to choose languages, design, and architecture of our liking to accomplish the task. The new platform was strategic in nature as well and was meant to be put in place for a long time. This was a great experience for me and gave me as a developer, the rare opportunity to work on an app from scratch. My user base was great and very knowledgeable in the finance space so I learned alot as well.
To staunch's point, the finance culture is broken and full of megalomania. Tons of developers and finance people with delusions of grandeur. The one thing I hate about the finance industry is how IT is treated and viewed by some parts of the business. We are viewed as nothing more than a utility. Too often I hear developers talking about 'moving up' and by this they mean leaving this creative craft of software development to be on the 'fun' side, i.e. the business end. This, to say the least, is demoralizing to the people that want to build systems for a living when you constantly have to hear this. Given this reality, I think the life of an developer in finance is short-lived. Burnout rates are high and job satisfaction is low. I have yet to meet developers that are excited about career prospects in finance.
I created a blog that will start talking about this and other things I see here: http://techjobsspace.blogspot.com
Anyway, these are my 2-cents. I am also looking to start something up on the side and get out of this dungeon.