Powershell isn't meant to do everything...if you judge it by that, it is a fail. But it is extensible. We use it at work from a build server to package up our some fairly big and complicated builds and automatically deploy it to a remote server, as well as the final product deployments too. Powershell does 90% of the work, but we've had to extend it in a few places to do some of the low level stuff. Its easily configurable, concise, but more importantly its maintainable by any decent windows admin or developer.
That is true for any project where you just keep building something bottom-up and just adding more code at the UI layer, or whatever layer your entry points are. I've seen enormous source code files in many languages / platforms. You've got to think beyond that and apply a little more structure yourself i.e. separation of concerns. Don't just slip into the easiest path whatever IDE, interface builder, or framework slides you down.
Sorry if i sounded critical, and thanks for the feedback.
Unit tests are great...but don't fall into the trap thinking that if you cover your code with them, it will find all your bugs, or protect you from changes introducing new ones.
Unit tests are usually very granular and designed to test specific scenarios. It also forces your code to be very modular in order to isolate the things to test. These are not bad attributes, but what many programmers forget is an application is the sum of its parts, and things most often break in the integration of all those pieces...not just isolated individual pieces you wrote the unit tests for.
Unit tests are just one part of the toolkit. Other tools and practices are good too. Writing clean code, logging, peer review etc. Even with perfect unit tests, the debugger is still indispensable for actually tracing into the code when you find a problem and understanding whats going on.
Most software is over-designed with features and options. 95% of users (not techies) are much happier having a simpler interface that easier to learn and use.
It is *very* difficult to hide complexity in software...most techies and designers usually avoid the problem by just adding options, abstraction layers, and complexity (this includes things like file systems, disk formats, encryption, and power saving options). Providing something functional yet simple that will still appeal the the majority is not easy.
Apple usually gets this right (not always), which is why they generally make great consumer devices. It does not appeal to technologists or the enterprise though, because they usually want more options, extensibility, or customization.
This trend happens in everything. A Model T ford exposed its implantation to a far greater extent to the driver. But most people these days just get in a car with very little of its deeper implementation or working exposed. Most people dont drive cars that they customize (although "commercial" or "trade" versions are usually still available for those that do). Apple devices are consumer devices. Dont expect from them all the same things you get from Linux or Windows.
Iran's current government is abysmal...but as a *nation* it has suffered a lot from foreign interference, including from the US, UK, and USSR. The main ones being an invasion during World War 2, an imposition of a dictator a decade later, and supporting Saddam Hussein in the Iraq/Iran war that caused millions of deaths. Yes, their current regime has behaved badly, and continues to do so, but so has the western world. On the balance of things, not looking at the smaller examples only, they have suffered more as a people and country.
And a little googling will show that Iran *did* offer aid after Katrina, but the US rejected it, as it did most foreign aid offers. Not a criticism though, its often for valid reasons. Aid hardly ever comes without strings attached...from anyone.
Buses are safer per miles traveled too, but people still drive cars....you cant just use safety stats. Nuclear is a sexy technology, and everything in me as a geek screams for me to support it. However its not an economically better option, and even less so if you factor in all the external costs; including nuclear waste, WMD proliferation fears etc. Fukushima might not have killed anyone, but what is the economic cost of the loss of all the productive land that has had to be evacuated? Countries like Britain only ever built Nuclear reactors because it produced the Uranium for their Nuclear weapons industry, and to reduce power of the coal miner unions....not because it was cheaper, even by the very optimistic calculations of the people that wanted it.
I always see the same arguments by pro-nuclear proponents here. I divide them into two threads...(1) Dont judge us by previous reactors designs....newer designs are safer...fair enough, but their still super expensive and can still fail catastrophically in a worst case scenario...and (2) My magic bullet will fix everything e.g. thorium, fast breeder.....sorry, none of these options exist commercially yet, are feasible, or meet all critical concerns.
Im not anti-nuclear...it has current applications like big bombs or powering very expensive warships... but ive yet to see a good economic power producing argument for them that includes all the external costs. I don't close my mind to new ideas e.g. a travelling wave reactor.....just make a good case for it first.
Part of the problem is you. Bosses can be jerks, but a lot of that is determined by how you let them treat you. As a coder, you shouldn't be an interchangeable part...you have skills and knowledge specific to organization. Use it....do a good job, but also be confident and stand up for yourself. Your not a easily replaceable factory line worker.
Next, work on your social skills. Be diplomatic with everyone you deal with. This means understanding where they come from (even if their jerks), and trying to make them happy. Often this means just listening, and framing your responses in their language. Its funny how easy it is to introduce people to new ideas if you come from their position but add something new.
Be proud of your work, and communicate it. This doesn't mean crowing or anything "in your face". Document it, comment your code, make it nice so that others understand it. It will form trust and respect from other workmates.
Finally, don't get stuck in a rut. Even if your day to day job is boring, be open to new ideas. Read, learn, experiment, and code on the side. Try to find something you enjoy, and find a way to relate it to your work. This doesn't mean introducing every new technology or pattern fad to your current project, but if its something you can do on the side, or something you can discuss with your team, its all good.
If you do these things, add them to your CV...even if you have no intention of moving jobs, its just something you can take pride in. Its easy to get down about work, but in software development, there is so much scope to do things that make our work more enjoyable. Even if your current job continues to be a pain, these are all things that will help you find something new. If you don't change, then your situation wont either.
I'm not disagreeing completely with you here...but judging popular protests by the fact that they don't "suggest something better" in not fair. A mass protest movement is never going to have a single better alternative to offer...there are simply too many people with contrary views. That doesn't make their grievance with the status quo unjust, and it doesn't mean that the government / system cant be reformed improved in ways to make it better for the majority. Most of them don't want to bring the system down...most still want their iPhones, they still want to use Facebook, and drink Coke....they just want improvements for everyone.
Just because hippies were dirty and smelly and high on pot, and had some loony ideas, didn't make Nixon a good president...
That has nothing to do with iOS or Android being a walled garden... iOS just has a better design; its applications are sandboxed from the underlying OS or need explicit permission to do the things that malware on Android easily gets away with.
I think people exaggerate the walled garden argument for the iPhone. Yes, Apple imposes some draconian conditions sometimes, but its still a pretty open platform. Most of the apps i use, and the content i have brought on my phone, have not been provided by Apple. I believe most of what the people here associate with a walled garden and criticize Apple about, are really decisions Apple made to make its devices more appealing to consumers e.g. iTunes pricing, simple content purchasing, and simplicity...
Want a more open device...dont buy an iPhone...most likely you will still be using a lot of technology and ideas pioneered by Apple e.g. Webkit, touch interfaces...but most likely, it wont be as great a consumer device.
Steve was a complex and amazing person....i dont mean to lessen all the contributions of all the people that worked with him, but he was the one that led and drove them into producing the most polished and consumer friendly devices that are with us today. He was a true leader and visionary...
Most "game engines" are based on similar architectures....highly performant engine components written in native C++, but game logic and user interface scripted in a higher level languages (LUA, QuakeC etc).
Native is always better for no-compromise performance and for taking full advantage of the platform, but web browsers have their place too.
Its not Active Desktop. This is a new shell and a new user interface paradigm, built on top of a completely new cross-platform API (WinRT). Metro applications run in seperate processes, sandboxed, and they never touch the win32 API. Furthermore, applications are installed from a trusted source (the windows app store). Its not a dodgy web page asking you to install an ActiveX control.
Microsoft are actually doing a lot of things right this time IMHO. Metro isnt for productivity applications or games, but its pretty good for tablets, status or information displays, or casual stuff. Dont like it, dont use it. Its not replacing the desktop. Excel, Blender, OpenOffice wont ever use it. Its just another shell, thats all.
My only gripe is they Metro applications can be written in HTML+js, but using extensions. This is so it appeals to a wide developer base. However, their not trying embrace and embed the wider web, so in this regard, its better then Android or iOS which use much more proprietary tools to write their applications.
Good software engineering practices like code reviews, source control, bug tracking, unit testing, etc. are generally no different. If applied correctly, they should reduce the overall time to release a product.
I actually agree with you here...but to use your analogy against you...*which practices?* I'm sure medicine is full of examples of practices that were thought to be beneficial, but that later went out of fashion. Software engineering is the same. Tell me in what context a practice is good, how it should be applied, and what benefits it gives, what pitfalls should be avoided, and proof for these claims. A lot of the "practices" we do in software development is driven by trends e.g. the latest technology or the latest methodology, or politics e.g. excessive reviews, meetings, procedures etc.