diff --git a/cms/djangoapps/contentstore/module_info_model.py b/cms/djangoapps/contentstore/module_info_model.py index 796184baa0..7ed4505c94 100644 --- a/cms/djangoapps/contentstore/module_info_model.py +++ b/cms/djangoapps/contentstore/module_info_model.py @@ -1,37 +1,35 @@ -import logging from static_replace import replace_static_urls from xmodule.modulestore.exceptions import ItemNotFoundError from xmodule.modulestore import Location -from xmodule.modulestore.django import modulestore -from lxml import etree -import re -from django.http import HttpResponseBadRequest, Http404 +from django.http import Http404 def get_module_info(store, location, parent_location=None, rewrite_static_links=False): - try: - if location.revision is None: - module = store.get_item(location) - else: - module = store.get_item(location) - except ItemNotFoundError: - raise Http404 + try: + if location.revision is None: + module = store.get_item(location) + else: + module = store.get_item(location) + except ItemNotFoundError: + # create a new one + template_location = Location(['i4x', 'edx', 'templates', location.category, 'Empty']) + module = store.clone_item(template_location, location) - data = module.definition['data'] - if rewrite_static_links: - data = replace_static_urls( - module.definition['data'], - None, - course_namespace=Location([ - module.location.tag, - module.location.org, - module.location.course, + data = module.definition['data'] + if rewrite_static_links: + data = replace_static_urls( + module.definition['data'], None, - None - ]) - ) + course_namespace=Location([ + module.location.tag, + module.location.org, + module.location.course, + None, + None + ]) + ) - return { + return { 'id': module.location.url(), 'data': data, 'metadata': module.metadata @@ -39,58 +37,56 @@ def get_module_info(store, location, parent_location=None, rewrite_static_links= def set_module_info(store, location, post_data): - module = None - isNew = False - try: - if location.revision is None: - module = store.get_item(location) - else: - module = store.get_item(location) - except: - pass + module = None + try: + if location.revision is None: + module = store.get_item(location) + else: + module = store.get_item(location) + except: + pass - if module is None: - # new module at this location - # presume that we have an 'Empty' template - template_location = Location(['i4x', 'edx', 'templates', location.category, 'Empty']) - module = store.clone_item(template_location, location) - isNew = True + if module is None: + # new module at this location + # presume that we have an 'Empty' template + template_location = Location(['i4x', 'edx', 'templates', location.category, 'Empty']) + module = store.clone_item(template_location, location) - if post_data.get('data') is not None: - data = post_data['data'] - store.update_item(location, data) + if post_data.get('data') is not None: + data = post_data['data'] + store.update_item(location, data) - # cdodge: note calling request.POST.get('children') will return None if children is an empty array - # so it lead to a bug whereby the last component to be deleted in the UI was not actually - # deleting the children object from the children collection - if 'children' in post_data and post_data['children'] is not None: - children = post_data['children'] - store.update_children(location, children) + # cdodge: note calling request.POST.get('children') will return None if children is an empty array + # so it lead to a bug whereby the last component to be deleted in the UI was not actually + # deleting the children object from the children collection + if 'children' in post_data and post_data['children'] is not None: + children = post_data['children'] + store.update_children(location, children) - # cdodge: also commit any metadata which might have been passed along in the - # POST from the client, if it is there - # NOTE, that the postback is not the complete metadata, as there's system metadata which is - # not presented to the end-user for editing. So let's fetch the original and - # 'apply' the submitted metadata, so we don't end up deleting system metadata - if post_data.get('metadata') is not None: - posted_metadata = post_data['metadata'] - - # update existing metadata with submitted metadata (which can be partial) - # IMPORTANT NOTE: if the client passed pack 'null' (None) for a piece of metadata that means 'remove it' - for metadata_key in posted_metadata.keys(): - - # let's strip out any metadata fields from the postback which have been identified as system metadata - # and therefore should not be user-editable, so we should accept them back from the client - if metadata_key in module.system_metadata_fields: - del posted_metadata[metadata_key] - elif posted_metadata[metadata_key] is None: - # remove both from passed in collection as well as the collection read in from the modulestore - if metadata_key in module.metadata: - del module.metadata[metadata_key] - del posted_metadata[metadata_key] - - # overlay the new metadata over the modulestore sourced collection to support partial updates - module.metadata.update(posted_metadata) - - # commit to datastore - store.update_metadata(location, module.metadata) + # cdodge: also commit any metadata which might have been passed along in the + # POST from the client, if it is there + # NOTE, that the postback is not the complete metadata, as there's system metadata which is + # not presented to the end-user for editing. So let's fetch the original and + # 'apply' the submitted metadata, so we don't end up deleting system metadata + if post_data.get('metadata') is not None: + posted_metadata = post_data['metadata'] + + # update existing metadata with submitted metadata (which can be partial) + # IMPORTANT NOTE: if the client passed pack 'null' (None) for a piece of metadata that means 'remove it' + for metadata_key in posted_metadata.keys(): + + # let's strip out any metadata fields from the postback which have been identified as system metadata + # and therefore should not be user-editable, so we should accept them back from the client + if metadata_key in module.system_metadata_fields: + del posted_metadata[metadata_key] + elif posted_metadata[metadata_key] is None: + # remove both from passed in collection as well as the collection read in from the modulestore + if metadata_key in module.metadata: + del module.metadata[metadata_key] + del posted_metadata[metadata_key] + + # overlay the new metadata over the modulestore sourced collection to support partial updates + module.metadata.update(posted_metadata) + + # commit to datastore + store.update_metadata(location, module.metadata) diff --git a/cms/djangoapps/contentstore/views.py b/cms/djangoapps/contentstore/views.py index 137e71b24a..87a2943773 100644 --- a/cms/djangoapps/contentstore/views.py +++ b/cms/djangoapps/contentstore/views.py @@ -122,7 +122,8 @@ def index(request): course.location.course, course.location.name])) for course in courses], - 'user': request.user + 'user': request.user, + 'disable_course_creation': settings.MITX_FEATURES.get('DISABLE_COURSE_CREATION', False) and not request.user.is_staff }) @@ -1259,6 +1260,10 @@ def edge(request): @login_required @expect_json def create_new_course(request): + + if settings.MITX_FEATURES.get('DISABLE_COURSE_CREATION', False) and not request.user.is_staff: + raise PermissionDenied() + # This logic is repeated in xmodule/modulestore/tests/factories.py # so if you change anything here, you need to also change it there. # TODO: write a test that creates two courses, one with the factory and diff --git a/cms/envs/common.py b/cms/envs/common.py index ef7a4f43fa..30aac6ea01 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -165,13 +165,6 @@ STATICFILES_DIRS = [ # This is how you would use the textbook images locally # ("book", ENV_ROOT / "book_images") ] -if os.path.isdir(GITHUB_REPO_ROOT): - STATICFILES_DIRS += [ - # TODO (cpennington): When courses aren't loaded from github, remove this - (course_dir, GITHUB_REPO_ROOT / course_dir) - for course_dir in os.listdir(GITHUB_REPO_ROOT) - if os.path.isdir(GITHUB_REPO_ROOT / course_dir) - ] # Locale/Internationalization TIME_ZONE = 'America/New_York' # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name diff --git a/cms/templates/index.html b/cms/templates/index.html index 92987babda..45c4edc176 100644 --- a/cms/templates/index.html +++ b/cms/templates/index.html @@ -37,7 +37,9 @@

My Courses

% if user.is_active: - New Course + % if not disable_course_creation: + New Course + %endif

Requirements:

-
  • JD from an accredited law school
  • -
  • Massachusetts bar admission required
  • -
  • 2-3 years of transactional experience at a major law firm and/or as an in-house counselor
  • -
  • Substantial IP licensing experience
  • -
  • Knowledge of copyright, trademark and patent law
  • -
  • Experience with open source content and open source software preferred
  • -
  • Outstanding communications skills (written and oral)
  • -
  • Experience with drafting and legal review of internet privacy policies and terms of use.
  • -
  • Understanding of how to balance legal risks with business objectives
  • -
  • Ability to develop an innovative approach to legal issues in support of strategic business initiatives
  • -
  • An internal business and customer focused proactive attitude with ability to prioritize effectively
  • -
  • Experience with higher education preferred but not required
  • - -

    If you are interested in this position, please send an email to jobs@edx.org.

    - + +

    If you are interested in this position, please send an email to jobs@edx.org.

    + + +
    + +
    +
    +

    DIRECTOR OF EDUCATIONAL SERVICES

    +

    The edX Director of Education Services reporting to the VP of Engineering and Educational Services is responsible for:

    +
      +
    1. Delivering 20 new courses in 2013 in collaboration with the partner Universities +
        +
      • Reporting to the Director of Educational Services are the Video production team, responsible for post-production of Course Video. The Director must understand how to balance artistic quality and learning objectives, and reduce production time so that video capabilities are readily accessible and at reasonable costs.

        +
      • Reporting to the Director are a small team of Program Managers, who are responsible for managing the day to day of course production and operations. The Director must be experienced in capacity planning and operations, understand how to deploy lean collaboration and able to build alliances inside edX and the University. In conjunction with the Program Managers, the Director of Educational Services will supervise the collection of research, the retrospectives with Professors and the assembly of best practices in course production and operations. The three key deliverables are the use of a well-defined lean process for onboarding Professors, the development of tracking tools, and assessment of effectiveness of Best Practices. +
      • Also reporting to the Director of Education Services are content engineers and Course Fellows, skilled in the development of edX assessments. The Director of Educational Services will also be responsible for communicating to the VP of Engineering requirements for new types of course assessments. Course Fellows are extremely talented Ph.D.’s who work directly with the Professors to define and develop assessments and course curriculum.
      • +
      +
    2. +
    3. Training and Onboarding of 30 Partner Universities and Affiliates +
        +
      • The edX Director of Educational Services is responsible for building out the Training capabilities and delivery mechanisms for onboarding Professors at partner Universities. The edX Director must build out both the Training Team and the curriculum. Training will be delivered in both online courses, self-paced formats, and workshops. The training must cover a curriculum that enables partner institutions to be completely independent. Additionally, partner institutions should be engaged to contribute to the curriculum and partner with edX in the delivery of the material. The curriculum must exemplify the best in online learning, so the Universities are inspired to offer the kind of learning they have experienced in their edX Training.
      • +
      • Expand and extend the education goals of the partner Universities by operationalizing best practices.
      • +
      • Engage with University Boards to design and define the success that the technology makes possible.
      • +
      +
    4. +
    5. Growing the Team, Growing the Business +
        +
      • The edX Director will be responsible for working with Business Development to identify revenue opportunities and build profitable plans to grow the business and grow the team.
      • +
      • Maintain for-profit nimbleness in an organization committed to non-profit ideals.
      • +
      • Design scalable solutions to opportunities revealed by technical innovations
      • +
      +
    6. +
    7. Integrating a Strong Team within Strong Organization +
        +
      • Connect organization’s management and University leadership with consistent and high quality expectations and deployment
      • +
      • Integrate with a highly collaborative leadership team to maximize talents of the organization
      • +
      • Successfully escalate issues within and beyond the organization to ensure the best possible educational outcome for students and Universities
      • +
      +
    8. +
    +

    Skills:

    + + +

    If you are interested in this position, please send an email to jobs@edx.org.

    +
    +
    + +
    +
    +

    MANAGER OF TRAINING SERVICES

    +

    The Manager of Training Services is an integral member of the edX team, a leader who is also a doer, working hands-on in the development and delivery of edX’s training portfolio. Reporting to the Director of Educational Services, the manager will be a strategic thinker, providing leadership and vision in the development of world-class training solutions tailored to meet the diverse needs of edX Universities, partners and stakeholders

    +

    Responsibilities:

    + +

    Requirements:

    + + +

    If you are interested in this position, please send an email to jobs@edx.org.

    +
    -

    INSTRUCTIONAL DESIGNER — CONTRACT OPPORTUNITY

    -

    The Instructional Designer will work collaboratively with the edX content and engineering teams to plan, develop and deliver highly engaging and media rich online courses. The Instructional Designer will be a flexible thinker, able to determine and apply sound pedagogical strategies to unique situations and a diverse set of academic disciplines.

    -

    Responsibilities:

    - -

    Qualifications:

    - -

    Eligible candidates will be invited to respond to an Instructional Design task based on current or future edX course development needs.

    -

    If you are interested in this position, please send an email to jobs@edx.org.

    -
    -
    - -
    -
    -

    MEMBER SERVICES MANAGER

    -

    The edX Member Services Manager is responsible for both defining support best practices and directly supporting edX members by handling or routing issues that come in from our websites, email and social media tools.  We are looking for a passionate person to help us define and own this experience. While this is a Manager level position, we see this candidate quickly moving through the ranks, leading a larger team of employees over time. This staff member will be running our fast growth support organization.

    +

    INSTRUCTIONAL DESIGNER

    +

    The Instructional Designer will work collaboratively with the edX content and engineering teams to plan, develop and deliver highly engaging and media rich online courses. The Instructional Designer will be a flexible thinker, able to determine and apply sound pedagogical strategies to unique situations and a diverse set of academic disciplines.

    Responsibilities:

    Qualifications:

    + +

    Eligible candidates will be invited to respond to an Instructional Design task based on current or future edX course development needs.

    +

    If you are interested in this position, please send an email to jobs@edx.org.

    +
    +
    + + +
    +
    +

    PROGRAM MANAGER

    +

    edX Program Managers (PM) lead the edX's course production process. They are systems thinkers who manage the creation of a course from start to finish. PMs work with University Professors and course staff to help them take advantage of edX services to create world class online learning offerings and encourage the exploration of an emerging form of higher education.

    +

    Responsibilities:

    + +

    Qualifications:

    + + +

    Preferred qualifications

    +

    If you are interested in this position, please send an email to jobs@edx.org.

    -
    +
    -

    DIRECTOR OF PR AND COMMUNICATIONS

    -

    The edX Director of PR & Communications is responsible for creating and executing all PR strategy and providing company-wide leadership to help create and refine the edX core messages and identity as the revolutionary global leader in both on-campus and worldwide education. The Director will design and direct a communications program that conveys cohesive and compelling information about edX's mission, activities, personnel and products while establishing a distinct identity for edX as the leader in online education for both students and learning institutions.

    +

    PROJECT MANAGER (PMO)

    +

    As a fast paced, rapidly growing organization serving the evolving online higher education market, edX maximizes its talents and resources. To help make the most of this unapologetically intelligent and dedicated team, we seek a project manager to increase the accuracy of our resource and schedule estimates and our stakeholder satisfaction.

    Responsibilities:

      -
    • Develop and execute goals and strategy for a comprehensive external and internal communications program focused on driving student engagement around courses and institutional adoption of the edX learning platform.
    • -
    • Work with media, either directly or through our agency of record, to establish edX as the industry leader in global learning.
    • -
    • Work with key influencers including government officials on a global scale to ensure the edX mission, content and tools are embraced and supported worldwide.
    • -
    • Work with marketing colleagues to co-develop and/or monitor and evaluate the content and delivery of all communications messages and collateral.
    • -
    • Initiate and/or plan thought leadership events developed to heighten target-audience awareness; participate in meetings and trade shows
    • -
    • Conduct periodic research to determine communications benchmarks
    • -
    • Inform employees about edX's vision, values, policies, and strategies to enable them to perform their jobs efficiently and drive morale.
    • -
    • Work with and manage existing communications team to effectively meet strategic goals.
    • +
    • Coordinate multiple projects to bring Courses, Software Product and Marketing initiatives to market, all of which are related, which have both dedicated and shared resources.
    • +
    • Provide, at a moment’s notice, the state of development, so that priorities can be enforced or reset, so that future expectations can be set accurately.
    • +
    • Develop lean processes that supports a wide variety of efforts which draw on a shared resource pool.
    • +
    • Develop metrics on resource use that support the leadership team in optimizing how they respond to unexpected challenges and new opportunities.
    • +
    • Accurately and clearly escalate only those issues which need escalation for productive resolution. Assist in establishing consensus for all other issues.
    • +
    • Advise the team on best practices, whether developed internally or as industry standards.
    • +
    • Recommend to the leadership team how to re-deploy key resources to better match stated priorities.
    • +
    • Help the organization deliver on its commitments with more consistency and efficiency. Allow the organization to respond to new opportunities with more certainty in its ability to forecast resource needs.
    • +
    • Select and maintain project management tools for Scrum and Kanban that can serve as the standard for those we use with our partners.
    • +
    • Forecast future resource needs given the strategic direction of the organization.
    -

    Qualifications:

    +

    Skills:

      -
    • Ten years of experience in PR and communications
    • -
    • Ability to work creatively and provide company-wide leadership in a fast-paced, dynamic start-up environment required
    • -
    • Adaptability - the individual adapts to changes in the work environment, manages competing demands and is able to deal with frequent change, delays or unexpected events.
    • -
    • Experience in working in successful consumer-focused startups preferred
    • -
    • PR agency experience in setting strategy for complex multichannel, multinational organizations a plus.
    • -
    • Extensive writing experience and simply amazing oral, written, and interpersonal communications skills
    • -
    • B.A./B.S. in communications or related field
    • +
    • Bachelor’s degree or higher
    • +
    • Exquisite communication skills, especially listening
    • +
    • Inexhaustible attention to detail with the ability to let go of perfection
    • +
    • Deep commitment to Lean project management, including a dedication to its best intentions not just its rituals
    • +
    • Sense of humor and humility
    • +
    • Ability to hold on to the important in the face of the urgent

    If you are interested in this position, please send an email to jobs@edx.org.

    -
    +
    + + +
    +
    +

    DIRECTOR, PRODUCT MANAGEMENT

    +

    When the power of edX is at its fullest, individuals become the students they had always hoped to be, Professors teach the courses they had always imagined and Universities offer educational opportunities never before seen. None of that happens by accident, so edX is seeking a Product Manager who can keep their eyes on the future and their heart and hands with a team of ferociously intelligent and dedicated technologists. +

    +

    The responsibility of a Product Manager is first and foremost to provide evidence to the development team that what they build will succeed in the marketplace. It is the responsibility of the Product Manager to define the product backlog and the team to build the backlog. The Product Manager is one of the most highly leveraged individuals in the Engineering organization. They work to bring a deep knowledge of the Customer – Students, Professors and Course Staff to the product roadmap. The Product Manager is well-versed in the data and sets the KPI’s that drives the team, the Product Scorecard and the Company Scorecard. They are expected to become experts in the business of online learning, familiar with blended models, MOOC’s and University and Industry needs and the competition. The Product Manager must be able to understand the edX stakeholders. +

    +

    Responsibilities:

    +
      +
    • Assess users’ needs, whether students, Professors or Universities.
    • +
    • Research markets and competitors to provide data driven decisions.
    • +
    • Work with multiple engineering teams, through consensus and with data-backed arguments, in order to provide technology which defines the state of the art for online courses.
    • +
    • Repeatedly build and launch new products and services, complete with the training, documentation and metrics needed to enhance the already impressive brands of the edX partner institutions.
    • +
    • Establish the vision and future direction of the product with input from edX leadership and guidance from partner organizations.
    • +
    • Work in a lean organization, committed to Scrum and Kanban.
    • +
    +

    Qualifications:

    +
      +
    • Bachelor’s degree or higher in a Technical Area
    • +
    • MBA or Masters in Design preferred
    • +
    • Proven ability to develop and implement strategy
    • +
    • Exquisite organizational skills
    • +
    • Deep analytical skills
    • +
    • Social finesse and business sense
    • +
    • Scrum, Kanban
    • +
    • Infatuation with technology, in all its frustrating and fragile complexity
    • +
    • Top flight communication skills, oral and written, with teams which are centrally located and spread all over the world.
    • +
    • Personal commitment and experience of the transformational possibilities of higher education
    • +
    + +

    If you are interested in this position, please send an email to jobs@edx.org.

    +
    +
    + + +
    +
    +

    CONTENT ENGINEER

    +

    Content engineers help create the technology for specific courses. The tasks include:

    +
      +
    • Developing of course-specific user-facing elements, such as the circuit editor and simulator.
    • +
    • Integrating course materials into courses
    • +
    • Creating programs to grade questions designed with complex technical features
    • +
    • Knowledge of Python, XML, and/or JavaScript is desired. Strong interest and background in pedagogy and education is desired as well.
    • +
    • Building course components in straight XML or through our course authoring tool, edX Studio.
    • +
    • Assisting University teams and in house staff take advantage of new course software, including designing and developing technical refinements for implementation.
    • +
    • Pushing content to production servers predictably and cleanly.
    • +
    • Sending high volumes of course email adhering to email engine protocols.
    • +
    +

    Qualifications:

    +
      +
    • Bachelor’s degree or higher
    • +
    • Thorough knowledge of Python, DJango, XML,HTML, CSS , Javascript and backbone.js
    • +
    • Ability to work on multiple projects simultaneously without splintering
    • +
    • Tactfully escalate conflicting deadlines or priorities only when needed. Otherwise help the team members negotiate a solution.
    • +
    • Unfailing attention to detail, especially the details the course teams have seen so often they don’t notice them anymore.
    • +
    • Readily zoom from the big picture to the smallest course component to notice when typos, inconsistencies or repetitions have unknowingly crept in
    • +
    • Curiosity to step into the shoes of an online student working to master the course content.
    • +
    • Solid interpersonal skills, especially good listening
    • +
    + +

    If you are interested in this position, please send an email to jobs@edx.org.

    +
    +
    + + +
    +
    +

    DIRECTOR ENGINEERING, OPEN SOURCE COMMUNITY MANAGER

    +

    In edX courses, students make (and break) electronic circuits, they manipulate molecules on the fly and they do it all at once, in their tens of thousands. We have great Professors and great Universities. But we can’t possibly keep up with all the great ideas out there, so we’re making our platform open source, to turn up the volume on great education. To do that well, we’ll need a Director of Engineering who can lead our Open Source Community efforts.

    +

    Responsibilities:

    +
      +
    • Define and implement software design standards that make the open source community most welcome and productive.
    • +
    • Work with others to establish the governance standards for the edX Open Source Platform, establish the infrastructure, and manage the team to deliver releases and leverage our University partners and stakeholders to
    • make the edX platform the world’s best learning platform. +
    • Help the organization recognize the benefits and limitations inherent in open source solutions.
    • +
    • Establish best practices and key tool usage, especially those based on industry standards.
    • +
    • Provide visibility for the leadership team into the concerns and challenges faced by the open source community.
    • +
    • Foster a thriving community by providing the communication, documentation and feedback that they need to be enthusiastic.
    • +
    • Maximize the good code design coming from the open source community.
    • +
    • Provide the wit and firmness that the community needs to channel their energy productively.
    • +
    • Tactfully balance the internal needs of the organization to pursue new opportunities with the community’s need to participate in the platform’s evolution.
    • +
    • Shorten lines of communication and build trust across entire team
    • +
    +

    Qualifications:

    +
      + +
    • Bachelors, preferably Masters in Computer Science
    • +
    • Solid communication skills, especially written
    • +
    • Committed to Agile practice, Scrum and Kanban
    • +
    • Charm and humor
    • +
    • Deep familiarity with Open Source, participant and contributor
    • +
    • Python, Django, Javascript
    • +
    • Commitment to support your technical recommendations, both within and beyond the organization.
    • +
    + +

    If you are interested in this position, please send an email to jobs@edx.org.

    +
    +
    + + +
    +
    +

    SOFTWARE ENGINEER

    +

    edX is looking for engineers who can contribute to its Open Source learning platform. We are a small team with a startup, lean culture, committed to building open-source software that scales and dramatically changes the face of education. Our ideal candidates are hands on developers who understand how to build scalable, service based systems, preferably in Python and have a proven track record of bringing their ideas to market. We are looking for engineers with all levels of experience, but you must be a proven leader and outstanding developer to work at edX.

    + +

    There are a number of projects for which we are recruiting engineers:
    + +

    Learning Management System: We are developing an Open Source Standard that allows for the creation of instructional plug-ins and assessments in our platform. You must have a deep interest in semantics of learning, and able to build services at scale.

    + +

    Forums: We are building our own Forums software because we believe that education requires a forums platform capable of supporting learning communities. We are analytics driven. The ideal Forums candidates are focused on metrics and key performance indicators, understand how to build on top of a service based architecture and are wedded to quick iterations and user feedback. + +

    Analytics: We are looking for a platform engineer who has deep MongoDB or no SQL database experience. Our data infrastructure needs to scale to multiple terabytes. Researchers from Harvard, MIT, Berkeley and edX Universities will use our analytics platform to research and examine the fundamentals of learning. The analytics engineer will be responsible for both building out an analytics platform and a pub-sub and real-time pipeline processing architecture. Together they will allow researchers, students and Professors access to never before seen analytics. + +

    Course Development Authoring Tools: We are committed to making it easy for Professors to develop and publish their courses online. So we are building the tools that allow them to readily convert their vision to an online course ready for thousands of students.

    + +

    Requirements:

    +
      +
    • Real-world experience with Python or other dynamic development languages.
    • +
    • Able to code front to back, including HTML, CSS, Javascript, Django, Python
    • +
    • You must be committed to an agile development practices, in Scrum or Kanban
    • +
    • Demonstrated skills in building Service based architecture
    • +
    • Test Driven Development
    • +
    • Committed to Documentation best practices so your code can be consumed in an open source environment
    • +
    • Contributor to or consumer of Open Source Frameworks
    • +
    • BS in Computer Science from top-tier institution
    • +
    • Acknowledged by peers as a technology leader
    • +
    + +

    If you are interested in this position, please send an email to jobs@edx.org.

    +
    +
    +

    Positions

    How to Apply

    -

    E-mail your resume, coverletter and any other materials to jobs@edx.org

    +

    E-mail your resume, cover letter and any other materials to jobs@edx.org

    Our Location

    11 Cambridge Center
    - Cambridge, MA 02142

    + Cambridge, MA 02142