|
I remember reading some time ago about this being the case with Chrome, and the solution was to remove the YouTube app from Chrome. (the URL of the apps page is chrome://apps by the way)
Hope this helps.
|
|
|
|
|
As a new coder who has not worked professionally yet, I am often inspired to work on my own projects - the main reason I learned to code ultimately was to develop my own projects and ideas. However, a lot of my ideas are "large" in nature. For example, I have an awesome app/website idea that will get business directory/location info from Google API, and then allow business owners and users to enter certain data about the business that will be available via my product's database. So the project will require a database, data modeling, my own API as well as usage of Google APIs, an architecture perhaps like MVC, and a whole lot more. Basically, it'll be a full-fledged project, that's for sure.
But these are my ideas... These are the things I care about and am willing to work on. For example, I spent a few days testing out the Google JavaScript API and realized it would definitely work for my project. The thing is, as someone who is new, I have this inherent fear that I will not "properly" make my application. So, in other words, because this will be my first "real" (I mean unguided and not something trivially simple) application, what if I don't do the architecture right? What if I overlook things that a seasoned programmer would say "holy cow why did you do it like that when you could have saved x amount of hours and it would be much better doing it like this?" One thing I learned about programming is theres a zillion ways to do things an that always makes me wonder "am I doing this the right/best way?"
It's almost like how if your first manual car was a Porsche, you wouldn't want to learn how to drive stick on a nice car like that lol. Well, I'm not sure I want to have my first real-world experience screwing up one of the reasons I learned to code. But unfortunately, because of that fear, then I don't create my own stuff that I maybe should.
Is this realistic or is coding not like that and should I just go for it?
|
|
|
|
|
The thing about driving a Porsche is that they are expensive machines and other people won't readily allow a new inexperienced driver to try one out. This is not the case with software - it is very low cost to tear down and repair if you get it wrong and people are very very generous to help or give you code to play with.
So - go for it.
|
|
|
|
|
Duncan Edwards Jones wrote: So - go for it.
|
|
|
|
|
Duncan Edwards Jones wrote: it is very low cost to tear down and repair if you get it wrong
No offense, but what company do you work for where development is cheap and inexpensive? I would think that your statement only holds some truth with "hobby" programmers, and not people like me.
|
|
|
|
|
agreed.
I am in the middle of rewriting an old application that was done the "wrong" way and it is most definitely not inexpensive for the people that are paying me.
That said, I still believe "go for it" is the correct advice. For my employer it probably would've cost more to not have this application written.
I deal with this fear every day but you just have to remember all software will become legacy eventually.[^]
|
|
|
|
|
Hi,
Yes, it's "realistic" to have concerns, and even some anxiety, about learning to code and starting to code projects. It's great you are "often inspired," and that you have ideas for "big" projects in the future ! However, if the anxiety is so acute you hesitate to take risks, then you need to find a way to work around that.
In my experience the ways people learn to code, and reach mastery of some programming language and some technology stack (framework + OS + ? internet) varies. Some folks are natural bottom-up learners who learn through experimentation and hands-on practice while they, at the same time, study documentation and code examples. Others are more top-down learners who habitually need to form a mental model of the "way things work," usually through reading documentation, before coding.
Each of those (non-exclusive) learning "styles" has its own challenges; the bottom-up learner may "travel too far" without seeing the theoretical "big-picture;" the top-down learner may stumble when they wade into the idiosyncrasies of turning their code into more than academic exercises.
The old saying "don't bite off more than you can chew" is relevant here, imho; try to focus on projects that you can be pretty sure can be attained in some reasonable period of time. And, how about the old standards: write your own calculator; write your own mini-word-processor; your own grid that supports formulas and calculated fields; your own media playback application; your own sticky-note app; your own app with an embedded web-browser which you control and do interesting things with/to, etc. are good things to take on.
Perhaps balance your self-challenges by coupling solving "algorithmic" problems (for example, the problems on projecteuler.net), with challenges that involve hands-on work with the native Controls in WinForms, WPF, ASP.NET.
There are lots of great projects (articles) here on CodeProject that you can benefit greatly from studying in addition to the tutorials, tip/tricks.
Look at Philip Piper's custom ListView [^], Mehdi Gholam's RaptorDB [^], Pavel Torgashov's FastColoredTextBox [^].
My focus is pretty narrow (WinForms), so I hope other folks here will chime in with some links to WPF and ASP.NET articles they feel are outstanding to learn from.
I think the prognosis for your technical future is excellent, and what you've done so far impresses me.
best wishes, Bill
«There is a spectrum, from "clearly desirable behaviour," to "possibly dodgy behavior that still makes some sense," to "clearly undesirable behavior." We try to make the latter into warnings or, better, errors. But stuff that is in the middle category you don’t want to restrict unless there is a clear way to work around it.» Eric Lippert, May 14, 2008
|
|
|
|
|
Definitely go for it!!
I have been programming for many years and numerous languages but I had never really done a significant embedded type of thing before so I recently just went for it and it isn't perfect but it works for my needs and I learned a ton.
I think those two things are key:
1. works for your needs
2. learn a ton while building/making
Here's the project I'm talking about if you're interested:
Never Buy A Garage Door Remote Again: Open Your Door With Your Android Phone (via Bluetooth)[^]
|
|
|
|
|
There is a saying in the recording industry, If it sounds good, it is.
Take this forward. If it works, it's good.
Don't let any of the coding Scribes and Pharisees tell you different.
|
|
|
|
|
Ron Anders wrote: Don't let any of the coding Scribes and Pharisees tell you different.
Then who will do his code review. How will he know if he is doing it correctly, or not?
Ron Anders wrote: If it works, it's good.
Huh. Really?
Does anyone here actually code for a living?
|
|
|
|
|
Just get it working is a common thought process in a lot of companies. The end user doesn't care if you're code is neatly organized and beautiful or that you used the latest and greatest framework that has super duper cool functionality...they only care that the application works. Compound that with managers who aren't technologically inclined (people managers), this thought process is even worse.
You apparently have been extremely lucky in your career, incompetence is a real problem in all industries...programming is certainly not excluded from that.
|
|
|
|
|
Software development always was and still is a moving area. People have new (or re-made) ideas on doing things. What seems right today will be thru out in a month and back again in the next after it...
There is no way to write some code right, but there are tools to check if the product works right... (test for bugs/performance/resource usage and so on)
So to see if you are doing things right, you HAVE TO write some code - good or not is irrelevant...You can not sit in front of a method, that computes standard deviation, and try to figure out if it is right or not... You have to put it in use and do tests...
The good part is, that in contrast to your Porsche (which will be broke forever after the first crash) you can always restart from fresh, and rewrite the exact same product using all your previous knowledge...
In short you have to roads to go, sitting paralyzed by your fear and lost it within a year, or to get your fingers dirty, your knees hurt, but got it all...
Skipper: We'll fix it.
Alex: Fix it? How you gonna fix this?
Skipper: Grit, spit and a whole lotta duct tape.
|
|
|
|
|
TheOnlyRealTodd wrote: what if I don't do the architecture right? In that case your software will be like a lot of other software out there.
No one does it right according to everyone else.
Mandatory Dilbert[^].
Just go for it.
|
|
|
|
|
You never learn without making mistakes.
Get stuck in......so what if you get it wrong......you will learn from it!
We have an expression, "Someone who has never ****ed up, has never done anything."
|
|
|
|
|
Besides all the rest, if someone beside you uses it they'll find a way to break it.
Part of what you'll be learning - slowly and painfully - is to outsmart users. More difficult than the actual coding, and often more time consuming. You just need to jump in and do things.
Let the games begin.
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you are seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
TheOnlyRealTodd wrote: who has not worked professionally yet,
If you are just a hobby programmer and have no aspirations to make it a profession, then just do your best and try to get someone in the community to help you and review your work.
If you are thinking about making this a profession, then get in with a company at the bottom level and learn as much as you can. If this is the profession for you, then you will do fine and it can be a very rewarding career.
If you are not making any mistakes, then you are doing it wrong.
-- Good luck.
|
|
|
|
|
No one does it "the best way", so dont be too afraid of making mistake. The right way is, to make a project a success: shipped in time and with budget and no major bugs/issues.
Make a prototype of the project and study the use cases. If they are fine - then you are ready for coding.
Press F1 for help or google it.
Greetings from Germany
|
|
|
|
|
TheOnlyRealTodd wrote: What if I overlook things that a seasoned programmer would say "holy cow why did you do it like that when you could have saved x amount of hours and it would be much better doing it like this?"
To which the CTO then walks in and says, oh, that approach is too complicated for the junior devs to understand, you should code it like you did first.
TheOnlyRealTodd wrote: One thing I learned about programming is theres a zillion ways to do things an that always makes me wonder "am I doing this the right/best way?"
When you factor in the intangibles by asking yourself how easy is it to test, to maintain, to extend, to find and fix bugs, to change when the requirements change, as well as things like what dependencies do I have that I don't have any control over, that might break my code in the next revision, or that kill my product when the third party no longer supports the stuff my code depends on, and then you ask yourself even broader questions like, what parts are re-usable in other projects, what happens when we want to port the app to another platform (or take a web app and make it a client app, or vice-versa), and then of course there's the questions of security, performance, usability, customer configurability, language support, internationalization...
...well, when you're done considering all those (and all the other things I didn't think of in the last minute)...
...then you realize that those zillion's of ways of doing something pretty much reduce down to a set of ways you could probably count on one hand.
But how you get there, well, you either learn from your mistakes or you find a mentor that can actually tell you the all important "why." The "why" is what is so greatly missing in the whole field of software development.
We have all these open source projects that tell you what and how, but rarely do they tell you why -- Why are we doing things this way? Why are we suggesting you do things this way too?
Look at jQuery's home page:
What is jQuery?
jQuery is a fast, small, and feature-rich JavaScript library. It makes things like HTML document traversal and manipulation, event handling, animation, and Ajax much simpler with an easy-to-use API that works across a multitude of browsers. With a combination of versatility and extensibility, jQuery has changed the way that millions of people write JavaScript.
Or vue.js:
Reactive Components for Modern Web Interfaces
or node.js:
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
or backbone.js:
Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.
Those are all "what's."
The one sort-of exception I've found so far is Angular's website:
Why AngularJS?
HTML is great for declaring static documents, but it falters when we try to use it for declaring dynamic views in web-applications. AngularJS lets you extend HTML vocabulary for your application. The resulting environment is extraordinarily expressive, readable, and quick to develop.
Though it still reads like a "what."
The most important question, when looking at those zillions of approaches, is "why."
Marc
|
|
|
|
|
Do you suppose the kids who started Google knew all the professional "rules" that seasoned pros know? Heck, no!
Your project sounds like an interesting one, and one that's worth doing. Do it your way, and if it turns out to be the next killer app, people will be studying "your way" to learn how to code.
Run with it!
Will Rogers never met me.
|
|
|
|
|
TheOnlyRealTodd wrote: you wouldn't want to learn how to drive stick on a nice car like that
Er, yes! I wold have loved a car like that when I learnt to drive!
Have some self confidence and get on with it. There are many ways to skin a cat, just because your approach is different to someone else's the proof of the pudding is in the eating. If it works and its stable its good, period.
Of course be prepared to learn too. No one expects a junior engineer to have all the answers. Takes time to learn you know.
|
|
|
|
|
Is this just a hobby project you have in mind or a commercial product?
With the latter then I think it's an idea to learn to swim properly before jumping in the deep end.
|
|
|
|
|
I feel your pain, been there myself. Sometimes still think of things to do which will simply take too long, or where I'd need to study up on special libraries/frameworks/etc. and again "take too long".
But if I've learned anything, it was always from making mistakes. All the courses, the books, the tuts, the examples, etc. ... all of them ... bar none ... only ever guided me into what I actually needed to "learn". It was only once I actually "did something" when I truly started to get the hang of this thing called programming. And even then, I still made lots of mistakes (still do even decades later) - you need a thick skin and the ability to laugh at yourself (else you'll get your feelings hurt and go mad).
The trick for me was to start off small. Partly I was fortunate, since my aim was for 3d modelling & rendering - in most cases my "projects" were nothing more than extensions to existing programs. So finding some idea which could easily be implemented in a matter of weeks (or even days) wasn't that difficult. It was only around 5 years after starting that I did anything closer to 1000s of LOC, and even later when I needed to combine several different aspects (like tying to a DB, adding web interface, etc.). But this does make newer "big-picture" ideas more difficult to do on your own, usually really impractical without a full team to work on different parts. What makes these ideas worse is the fact that I'm not full time on them, I've got a day-job (diagonally related to programming) so the hobby programming ideas always take a back seat.
My advise: Try to be courageous, don't let any critique get to you (use it instead to try and learn). Try to see if parts of your "big-ideas" can be implemented on their own. E.g. perhaps look at just making a parser for the google data first, or a DB to hold such searchable info, etc. etc. Don't worry too much about making each into the Mona-Lisa of code, definitely don't waste your time in optimizing them to death (that effort would most likely be completely useless). Next try to see if you can modify these to combine them.
You're most probably going to run into issues, I can nearly guarantee that, and these are when you realize the "mistake" and then learn to make it "better". Note, "mistake" is not necessarily something you did "wrong", just that it either doesn't work in your scenario or it makes something else cumbersome / inefficient / unworkable / etc. Even if you did everything "perfectly" and others pray to your code as a new religious tome, it might still be worthless.
Sometimes a bad piece of code becomes a necessity to make something just "work". As an example I needed to parse a hierarchical tab-delimited file for display in a searchable tree-view. Since this file was what a program was using for items to be placed in a workshared 3d model (being concurrently worked on by multiple people) the flat file needed to be updated nearly immediately and searches & edits shouldn't be "slow". There was a way to change the program so it used a DB instead, so I tried the whole thing from a client-server DB idea. But that turned this seemingly simple project into multiple big projects. Spending months on it and in the end finding that such was simply stupidly slow to load, search, edit, etc. Spending yet more months on tweaking to try and get performance to acceptable levels, researching, finding tricks, web searches etc. Redesign the DB structure, add extra indexing, modify queries, changing queries to server procedures, caching results, etc. etc. etc. Nothing worked. Finally I gave up and just went with a straight forward parsing of the original flat file into a in-memory n-tree with hashtable backing for key loopuks (and a "fuzz" text search on names and descriptions), took around a month to implement as straight-forwardly as possible - used a lot more RAM, concurrency locking was nearly non-existent, etc etc etc. But it worked, and all the users were happy with the performance, still used years later (very few bug reports and/or feature requests).
I'm very embarrassed by the code itself, it's a hack, and not a very good one at that. It's still a pet peeve of mine to try and turn such collection data structure into a more formal hierarchical catalogue structure, but every time I try I run out of time and/or think of doing it a slightly "better" way. I must have around 20 versions of my attempts floating around my backup discs somewhere. Few of them actually work, even less are something I'd feel comfortable sharing, none I'm proud of. But boy, did I learn some huge lessons in that time.
|
|
|
|
|
Let me give you the outsiders view of INTUIT.
They started with an electronic way to balance your checkbook!
It was horrible code. But it fit a need.
They parlayed that into QuickBooks. At first the accountants HATED QB.
Because it let normal people (like me) do accounting. And do it fairly well,
or fairly wrong, depending.
Then Intuit focused on tools for the Accountants, so they could process the files,
etc. (My brother is a CPA, certified in QB). For many years QB Sucked for multiple users.
They made MILLIONS along the way.
Their QB Online. Kinda sucks, and is missing key, obvious features (Like an External Customer ID
to link customers in QB to customers in the clients DB, in a unique fashion). OMG. They missed that?
The point of this dribble is that Perfect Software doesn't always sell.
Don't focus on perfection, focus on getting it working, and scratching the itch.
It can always be rewritten later, if it is successful. QB was rewritten about 4 times.
So, you are running into the old paradigm: Fast, Right or Cheap: Choose 2! (You cannot optimize for all 3). Since you are doing it yourself, and without funding. CHEAP is now there.
So, you are contemplating your choices.
Do I do it RIGHT? Or do I do it Fast? (Getting it finished).
How much is an unfinished movie or book worth? (About nothing, there are a zillion of them).
[Ignore getting paid (raising money) to finish a good story, unless that is your intent]
Hopefully this helps you see where you are at.
At one point in my career, we released a stable (but unfinished product), with the ability to push updates out to the clients throughout the US. We were YEARS behind the competition. But in the first year, we averaged 2.5 updates per week EVERY WEEK. 99% of the updates were stable and added missing functionality that reduced work effort of the customers. Within a year, we were on par with the other software. And 6 months after that, we were ahead of them, and all the buzz. And we never stopped for a couple of more years, when they closed up shop. By then our updates were down to 1-2/month, but we did not need so many.
A Stable framework that is safe/easy to update goes a long way. Updates are guaranteed to happen.
To me, focus there, the rest will take care of itself.
What is wrong with Publish/Feedback/Develop/TEST/Publish... as a cycle? It will get you where you are going. Just try not to break it. If you do, fix it quickly!
|
|
|
|
|
That's a very good idea: Design for change. Although it usually means "fast" isn't exactly as "fast" anymore.
Simply because such design-for-change tends to guide a programmer down a rabbit hole of "what sort of changes can be made". This tends to be one of the culprits in writing zombie code (especially if you organize in OOP structures). But I guess experience would teach you to avoid the pitfalls.
|
|
|
|
|
We got there pragmatically.
We knew we would be updating the software frequently, and in the industry, it was not uncommon to have to schedule an update per client site. We simply did not have the people power to do that.
So, by making the software run an Auto/Optional update (so we could tweak/test things that were ignorable by the users) we could really push updates out. We did 10 updates in a single day in the beginning. I was on site, and every hour we were releasing optional changes as fast as we could.
I don't try to make my OOP stuff that way. I simply try to keep the coupling low enough, that if we have to change, we can. Some changes SUCKED (I will be honest). When we went from Grids that were single select to multi-select. We had to refactor a LOT of code. And worse, it confused new users a lot, so it became a MODE you turn on. Ugghhh. But it worked. New users were happy and learned quickly, and power users could turn on multi-select, select 30-100 records and click Print File Label. And get the file Labels (Printed in the order they were on the screen), as opposed to 30-100 clicks of the Print File Label button.
More like: Assume changes are going to come down the pipe. Where do you want to spend your time. Helping people install the new software, or getting more changes made? Find your pain, and eliminate it.
Thanks!!!
|
|
|
|
|